Не видя вашего кода, немного сложно ответить конкретно, но вот один из способов сделать это.
Во-первых, мы понимаем, что нам нужно связать «Описание» вместе с «Количество» или «Цена» для каждого элемента в наших списках. Один простой способ сделать это - создать базовый класс c:
public class MyItem
{
public string Description { get; set; }
public decimal Value { get; set; }
public MyItem(string description, decimal value)
{
Description = description;
Value = value;
}
}
Теперь мы можем создавать списки этого класса и использовать эти списки в качестве источников данных для наших списков, чтобы каждый Item
в списке действительно есть экземпляр класса MyItem
:
private void Form1_Load(object sender, EventArgs e)
{
// Set the DataSource for each listbox to
// a list of our custom "MyItem" class
lstCookieTypes.DataSource = new List<MyItem>
{
new MyItem("$1.50 - Chocolate Chip Cookie", 1.5m),
new MyItem("$1.00 - Oatmeal Cookie", 1),
new MyItem("$1.25 - Sugar Cookie", 1.25m),
};
lstCookieQuantities.DataSource = new List<MyItem>
{
new MyItem("1 Cookie", 1),
new MyItem("1 Dozen Cookies", 12),
new MyItem("2 Dozen Cookies", 24),
};
// Continued below...
Теперь, когда наши списки заполнены данными, нам нужно указать DisplayMember
или свойство, которое мы хотим это использовать для отображения текста пользователю. Это будет наше свойство "Description":
// Use the "Description" property of "MyItem" as the DisplayMember
lstCookieTypes.DisplayMember = "Description";
lstCookieQuantities.DisplayMember = "Description";
}
Далее нам нужен метод, который может взять выбранный элемент из каждого списка, определить значение для этих элементов, умножить их вместе и отобразить результат (как валюта) для пользователя. Обратите внимание, что мы должны привести SelectedValue
к MyItem
, чтобы получить доступ к свойству Value
(и происходит некоторое объединение нулей для обработки случаев, когда SelectedValue
равно null
):
private void DisplayTotal()
{
// Calculate the total by multiplying the "Value" for the selected
// cookie type with the "Value" for the selected cookie quantity
var total = ((lstCookieTypes.SelectedValue as MyItem)?.Value ?? 0) *
((lstCookieQuantities.SelectedValue as MyItem)?.Value ?? 0);
lblPrice.Text = total.ToString("C"); // "C" will format the number as currency
}
Наконец, осталось только вызвать этот метод из события SelectedIndexChanged
для каждого списка, поэтому наш итог обновляется, когда пользователь выбирает нового повара ie или новое количество:
private void lstCookieTypes_SelectedIndexChanged(object sender, EventArgs e)
{
DisplayTotal();
}
private void lstCookieQuantities_SelectedIndexChanged(object sender, EventArgs e)
{
DisplayTotal();
}