vb.net - 将列表框乘以组合框
问题描述
我有一个 ListBox lstRoomType
,它有 5 种类型的房间,每种都有自己的价格。然后我有一个cboNumberOfNights
包含晚数(从 1 到 31)的 ComboBox ( )
如何乘以lstRoomType
得到cboNumberOfNights
房价?
更新
我的列表框中的条目是一堆字符串:
"room a $25"
"room b $30"
"room c $40"
我还需要从选定的字符串中提取数值。
解决方案
你的ListBox
和ComboBox
都是对象;一般来说,任意对象不能相乘。在 .NET 中,乘法是指数学运算,它实际上只适用于一对数字。1
您实际上正在寻找的是根据列表框的当前选定项将列表框中的某个值乘以组合框中的某个值(基于组合框的当前选定项)。
WinForms ListBox和 WPF ListBox都有一个SelectedItem
属性,您可以使用它。假设您有某种描述房间类型和价格的类型:
Public Class RoomType
Property Description As String
Property Price As Double
End Class
你已经用一些集合填充了你的列表框RoomType
;并假设您已经用一些数字集合填充了组合框,您可以使用:
Dim price = CType(lstRoomType.SelectedItem, RoomType).Price * CInt(cmbNumberOfNights.SelectedItem)
如果您的列表框的项目不是某种数据类型的实例,而是字符串,那么您将不得不解析由SelectedItem
. 就像是:
Dim roomRate = Double.Parse(CStr(lstRoomType.SelectedItem).Split(" ").Last().TrimStart("$"))
Dim price = roomRate * CInt(cmbNumberOfNights.SelectedItem)
通常,您的项目最好是具有属性的对象而不是字符串;必须从字符串中提取数字更容易出错。
1. Python 允许您将字符串乘以一个数字:s = 'abcd' * 5
并且s
将包含重复 5 次的字符串。但这仅与值类型(以及String
在许多方面与值类型类似的类型)相关,其中具有相同值的多个实例是等价的;对于引用类型的乘法没有多大意义——lstRoomType * 5
只能返回一些对同一个列表框有 5 个引用的集合,这是非常没用的。
推荐阅读
- regex - 需要一个正则表达式 - 只允许零,允许其他数字的零
- java - 如何在Android中获取所选单选按钮的ID
- c++ - 了解 C++ 中函数的值类别
- java - 如果 raw 默认为 Object,则为通用参数
- ionic-framework - 尝试在ionic 4中使用用于斑马打印机的cordova插件进行打印
- android - 是什么让我的 uploadImage() 中的视图发生了变化?
- python - 安装 tensorflow 2 有问题
- javascript - Safari 和 WKWebview 中的不同滚动行为
- javascript - Chrome控制台中9_9和99作为整数有什么区别
- jquery - 在 app.js 中需要 $ 后在视图中使用“$ 未定义”