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
。