Умножить список с помощью combobox - PullRequest
0 голосов
/ 06 июня 2018

У меня есть ListBox lstRoomType, который имеет 5 типов комнат, каждый со своими ценами.И тогда у меня есть ComboBox (cboNumberOfNights) с количеством ночей (от 1 до 31)

Как я могу умножить lstRoomType на cboNumberOfNights, чтобы получить стоимость номера?


Обновление

Записи в моем списке представляют собой набор строк:

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

Мне также необходимо извлечь числовое значение из выбранной строки.

1 Ответ

0 голосов
/ 06 июня 2018

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...