0

基本的に、xmlファイルからリスボックスに情報を読み取り、ユーザーがリストボックス内のアイテムを別のリストボックスに転送できるようにするプログラムを作成しています。

しかし、あるリストボックスから別のリストボックスに複数のアイテムがインポートされないようにする方法が必要です。リストボックスに文字列が既に存在するかどうかを確認するために、どうにかしてエクスプレッションを実行できると思いました。

私がこれをしたい理由は、ユーザーが項目をインポートするために 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]);
    }
}
4

2 に答える 2

3
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それは実際には機能しますが、メソッドを使用する必要があります。ただし、1 つの重要なポイントを見逃している可能性があります。

にデータを入力するためにどのタイプのアイテムを使用していますListBoxか? デフォルトでは、参照等価性を使用しExistsます。したがって、値に基づいてフィルタリングする必要がある場合は、タイプをオーバーライドしてセマンティクスを変更する必要があります。.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

于 2012-06-14T21:47:45.247 に答える
1

これでうまくいくはずです...

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

    }
于 2012-06-14T21:54:45.860 に答える