Оба ваших 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 ссылками на один и тот же список, что довольно бесполезно.