Как рассчитать сумму из списков в форме - PullRequest
0 голосов
/ 28 апреля 2020

Как мне заставить мою программу рассчитать общее количество из 2 разных списков, которые есть в моей форме. Я пробовал много разных вещей, и я бы получил случайные значения, которые я не понимаю, откуда они берутся. Цель этого состоит в том, чтобы пользователь выбирал, какой тип повара ie он хочет, и сумму, которую он хочет. Внизу формы есть метка, которая вычисляет сумму. Но когда я попытался создать код для этого, я получил бы числа, которые не имеют смысла, как 0, 2, 4 и т. Д. c.

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void monthCalendar1_DateChanged(object sender, DateRangeEventArgs e)
        {
            const int ESTIMATED_ARRIVAL = 3;
            label10.Text = monthCalendar1.SelectionStart.AddDays(ESTIMATED_ARRIVAL).ToShortDateString();
        }

        private void listBox2_SelectedIndexChanged(object sender, EventArgs e)
        {

        }
    }

Вот мой код. Я искал во всем inte rnet какое-либо удаленное решение и не нашел ничего, что помогло бы мне. Я работал над этим часами подряд.

Вот так выглядит моя форма. enter image description here

1 Ответ

1 голос
/ 28 апреля 2020

Не видя вашего кода, немного сложно ответить конкретно, но вот один из способов сделать это.

Во-первых, мы понимаем, что нам нужно связать «Описание» вместе с «Количество» или «Цена» для каждого элемента в наших списках. Один простой способ сделать это - создать базовый класс 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...