由combobox乘以列表框

时间:2018-06-06 04:17:26

标签: vb.net winforms

我有一个ListBox lstRoomType,它有5种类型的房间,每个房间都有自己的价格。然后我有一个ComboBox(cboNumberOfNights)与夜晚的数量(从1到31)

如何将lstRoomType乘以cboNumberOfNights以获得房价?

更新

我的列表框中的条目是一堆字符串:

"room a $25"
"room b $30"
"room c $40"

我还需要从所选字符串中提取数值。

1 个答案:

答案 0 :(得分:0)

ListBoxComboBox都是对象;通常,任意对象不能相互相乘。在.NET中,乘法是指数学运算,它实际上只适用于一对数字。 1

您实际需要的是根据组合框的当前所选项目,根据列表框的当前所选项目,将组合框中的某些值与组合框中的某些值相乘。 / p>

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' * 5s将包含重复5次的字符串。但这仅适用于值类型(以及String等类型,其行为方式类似于值类型),其中具有相同值的多个实例是等效的;对于引用类型,乘法并没有多大意义 - lstRoomType * 5只能返回一些带有5个引用同一列表框的集合,这是非常没用的。