C# 防止向ListView添加重复的零食
我现在被困在这个问题上2个小时了,我尽我所能找到答案,但还没有C# 防止向ListView添加重复的零食,c#,winforms,C#,Winforms,我现在被困在这个问题上2个小时了,我尽我所能找到答案,但还没有 public class Snack { public string snack { get; set; } public double amount { get; set; } public int price { get; set; } public Snacks snacks; public enum Snacks { friet, kroket
public class Snack
{
public string snack { get; set; }
public double amount { get; set; }
public int price { get; set; }
public Snacks snacks;
public enum Snacks
{
friet,
kroket,
frikandel,
Burger,
}
}
在load
方法中,我正在初始化我的ListView:
private void load()
{
lstSnacks.View = View.Details;
lstSnacks.Columns.Add("snack");
lstSnacks.Columns.Add("amount");
lstSnacks.Columns.Add("price");
cmbSnack.Items.AddRange(Enum.GetNames(typeof(Snack.Snacks)));
cmbSnack.SelectedIndex = (int)Snack.Snacks.friet;
}
之后,我有一个按钮,在该按钮中,我添加了一些零食,其中包含文本框中输入的金额和固定价格:
private void btnAdd_Click(object sender, EventArgs e)
{
if (!lstSnacks.Items.ContainsKey(cmbSnack.SelectedItem.ToString()))
{
double totalprice = 0;
Snack snack1 = new Snack();
snack1.snack = cmbSnack.SelectedItem.ToString(); ;
snack1.amount = Convert.ToDouble(txtAmount.Text);
ListViewItem item = lstSnacks.Items.Add(cmbSnack.SelectedItem.ToString());
item.SubItems.Add(snack1.amount.ToString());
if (cmbSnack.SelectedIndex == 0)
{
snack1.price = (int)(snack1.amount * 2.50);
item.SubItems.Add(snack1.price.ToString());
}
}
我需要查看我的ListView,如果它还没有的话,我需要添加一份点心。如果是,它应该告诉您它已经在那里了,但是items.ContainsKey
对我来说不正常。我做错了什么?线路
ListViewItem item = lstSnacks.Items.Add(cmbSnack.SelectedItem.ToString());
…设置ListViewItem的文本属性。要能够使用ContainsKey()
,还需要设置其属性
另一件事:考虑使用,而不是<代码> Real.toDouple()<代码>,因为不能保证用户输入一个有效的数字。在处理用户输入时,始终使用
.TryParse()
方法,而不是Convert.toxxx()
或.Parse()
我会将代码更改为如下内容:
string itemName = cmbSnack.SelectedItem.ToString();
if (lstSnacks.Items.ContainsKey(itemName))
{
MessageBox.Show("The item already exists in the list.", "Duplicate item");
return;
}
if (!double.TryParse(txtAmount.Text, out double amount))
{
MessageBox.Show("Please enter a valid amount.", "Incorrect 'Amount' value");
return;
}
double totalprice = 0;
Snack snack1 = new Snack();
snack1.snack = itemName;
snack1.amount = amount;
ListViewItem item = lstSnacks.Items.Add(itemName);
item.Name = itemName;
item.SubItems.Add(snack1.amount.ToString());
if (cmbSnack.SelectedIndex == 0)
{
snack1.price = (int)(snack1.amount * 2.50);
item.SubItems.Add(snack1.price.ToString());
}
这回答了你的问题吗?非常感谢你!!非常感谢@别客气!我又加了一张便条。检查更新的代码。