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