首页 > 解决方案 > 将列表框乘以组合框

问题描述

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

如何乘以lstRoomType得到cboNumberOfNights房价?


更新

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

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

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

标签: vb.netwinforms

解决方案


你的ListBoxComboBox都是对象;一般来说,任意对象不能相乘。在 .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 个引用的集合,这是非常没用的。


推荐阅读