-2
我有一個ListView其中Checked = true和兩個組(Selected和Not Selected)。在選中我希望將項目移動到合適的組,但似乎移動組會導致再次觸發ItemChecked事件。c#WinForms ListView按選擇分組
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 = 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;
}
試過'listView1.Items [e.Item.Index]。集團= ListView1的.Groups [e.Item.Checked? 0:1];'但仍然是相同的問題 – rjinski
@rjinski你有**註冊**'ItemCheck'你的'listbox'事件處理程序?順便說一句,**我測試了這個**,我不是這樣寫的。 –
@rjinski你必須刪除你的代碼,不要使用你的代碼與我的代碼同時使用。 –