如何获取列表框以禁止重复项

本文关键字:禁止 列表 何获取 获取 | 更新日期: 2023-09-27 18:37:09

基本上是创建一个程序,该程序将信息从xml文件读取到lisbox中,并允许用户将列表框中的项目传输到另一个listBox。

但是我想了解一下如何禁止将多个项目从一个列表框导入到另一个列表框。我想我可以以某种方式进行一次体验来检查字符串是否已存在于列表框中。

我想这样做的原因是因为用户可以单击 x 次以导入项目,而且这是不专业的。

任何帮助将不胜感激,谢谢。

private void button1_Click(object sender, EventArgs e)
{
    if (!listBox.Items.Exists) // Random Idea which doesnt work
    {
        listBox2.Items.Add(listBox1.Items[listBox1.SelectedIndex]);
    }
}

如何获取列表框以禁止重复项

private void button1_Click(object sender, EventArgs e)
{
    if (!listBox.Items.Exists) // Random Idea which doesnt work
    {
    listBox2.Items.Add(listBox1.Items[listBox1.SelectedIndex]);
    }
}

这实际上会起作用,但您需要使用 Contains 方法。但是,您可能错过了一个关键点。

您使用什么类型的项目来填充您的ListBoxExists将调用默认情况下使用引用相等的.Equals。因此,如果需要根据值进行筛选,则需要覆盖类型.Equals并更改语义。

例如:

class Foo 
{ 
    public string Name { get; set; }
    public Foo(string name)
    {
        Name = name;
    }
}
class Program
{
    static void Main( string[] args )
    {
        var x = new Foo("ed");
        var y = new Foo("ed");
        Console.WriteLine(x.Equals(y));  // prints "False"
    }       
}

但是,如果我们覆盖.Equals以提供值类型语义......

class Foo 
{ 
    public string Name { get; set; }
    public Foo(string name)
    {
        Name = name;
    }
    public override bool Equals(object obj)
    {
        // error and type checking go here!
        return ((Foo)obj).Name == this.Name;
    }
    // should override GetHashCode as well
}
class Program
{
    static void Main( string[] args )
    {
        var x = new Foo("ed");
        var y = new Foo("ed");
        Console.WriteLine(x.Equals(y));  // prints "True"
        Console.Read();
    }       
}

现在,您对if(!listBox.Items.Contains(item))的调用将按您的预期工作。 但是,如果您希望它继续工作,则需要将该项添加到两个列表框中,而不仅仅是listBox2

这应该可以为您完成...

private void button1_Click(object sender, EventArgs e)
    {
        if (!ListBox.Items.Contains(listBox1.SelectedItem)) // Random Idea which doesnt work
        {
        listBox2.Items.Add(listBox1.SelectedItem);
        }
    }