C# 如何从表单中的列表框计算总计

C# 如何从表单中的列表框计算总计,c#,C#,我如何让我的程序从我表格中的两个不同列表框中计算总数。我尝试过很多不同的方法,我会得到随机值,我不知道它们来自哪里。这样做的目的是用户选择他们想要的cookie类型和数量。在表单的底部,有一个计算总数的标签。但是当我尝试创建代码时,我会得到一些没有意义的数字,比如0、2、4等等 public partial class Form1 : Form { public Form1() { InitializeComponent();

我如何让我的程序从我表格中的两个不同列表框中计算总数。我尝试过很多不同的方法,我会得到随机值,我不知道它们来自哪里。这样做的目的是用户选择他们想要的cookie类型和数量。在表单的底部,有一个计算总数的标签。但是当我尝试创建代码时,我会得到一些没有意义的数字,比如0、2、4等等

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)
        {

        }
    }
这是我的密码。我在互联网上到处寻找任何一种远程解决方案,但没有找到任何对我有帮助的。我已经连续做了几个小时了

这就是我的表格。
如果没有看到您的代码,具体地回答有点困难,但这里有一种方法

首先,我们意识到我们需要为列表框中的每个项目捆绑一个“描述”和一个“数量”或“价格”。一种简单的方法是创建一个基本类:

public class MyItem
{
    public string Description { get; set; }
    public decimal Value { get; set; }

    public MyItem(string description, decimal value)
    {
        Description = description;
        Value = value;
    }
}
现在,我们可以创建此类的列表,并将这些列表用作列表框的数据源,这样列表框中的每个
实际上就是
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...
接下来,我们需要一个方法,可以从每个列表框中获取所选项目,确定这些项目的值,将它们相乘,并将结果(作为货币)显示给用户。请注意,我们必须将
SelectedValue
强制转换为
MyItem
,以便访问
Value
属性(在
SelectedValue
null
的情况下,会有一些空合并进行处理):

最后,剩下的就是从每个列表框的
SelectedIndexChanged
事件调用此方法,这样当用户选择新的cookie或新的数量时,我们的总数就会更新:

private void lstCookieTypes_SelectedIndexChanged(object sender, EventArgs e)
{
    DisplayTotal();
}

private void lstCookieQuantities_SelectedIndexChanged(object sender, EventArgs e)
{
    DisplayTotal();
}

我在这里没有看到任何更新价格标签的代码。也没有填充列表框的任何代码。1。获取所选项目的所选索引。2.查找代码中所选索引的值(对于“类型”列表框,索引0=1.5,索引1=1,索引2=1.25。如何查找取决于数据源,或者是否要硬编码映射,或者是否要解析文本中的数字)3。将这些值相乘。
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
}
private void lstCookieTypes_SelectedIndexChanged(object sender, EventArgs e)
{
    DisplayTotal();
}

private void lstCookieQuantities_SelectedIndexChanged(object sender, EventArgs e)
{
    DisplayTotal();
}