Checked = true と 2 つのグループ (Selected と Not Selected) を持つ ListView があります。On Checked アイテムを適切なグループに移動したいのですが、グループを移動すると ItemChecked イベントが再びトリガーされるようです。
private void Form1_Load(object sender, EventArgs e)
{
listView1.ItemChecked += listView1_ItemChecked;
}
private void listView1_ItemChecked(object sender, ItemCheckedEventArgs e)
{
foreach (ListViewItem item in listView1.Items)
{
if (item.Checked && item.Group != listView1.Groups["grpSelected"])
{
Console.WriteLine("Checked = true [1] : " + item.Text);
item.Group = listView1.Groups["grpSelected"];
Console.WriteLine("Checked = true [2] : " + item.Text);
break;
}
if (!item.Checked && item.Group != listView1.Groups["grpNotSelected"])
{
Console.WriteLine("Checked = false [1] : " + item.Text);
item.Group = listView1.Groups["grpNotSelected"];
Console.WriteLine("Checked = false [2] : " + item.Text);
break;
}
}
}
Checked --> !Checked からの出力の結果
Checked = false [1] : test0
Checked = true [1] : test0
Checked = true [2] : test0
Checked = false [2] : test0
この機能を取得するためのより良い方法はありますか? それとも問題を回避する方法ですか?現在、目的の効果を得るにはダブルクリックする必要がありますが、非常に醜いです!
編集
これはうまくいきましたが、間違っているようです...
private void listView1_ItemChecked(object sender, ItemCheckedEventArgs e)
{
listView1.ItemChecked -= listView1_ItemChecked;
foreach (ListViewItem item in listView1.Items)
{
if (item.Checked && item.Group != listView1.Groups["grpSelected"])
{
item.Group = listView1.Groups["grpSelected"];
item.Checked = true;
break;
}
if (!item.Checked && item.Group != listView1.Groups["grpNotSelected"])
{
item.Group = listView1.Groups["grpNotSelected"];
item.Checked = false;
break;
}
}
listView1.ItemChecked += listView1_ItemChecked;
}