Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 防止向ListView添加重复的零食_C#_Winforms - Fatal编程技术网

C# 防止向ListView添加重复的零食

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

我现在被困在这个问题上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,
        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());
}

这回答了你的问题吗?非常感谢你!!非常感谢@别客气!我又加了一张便条。检查更新的代码。