提問:
我在listview中加入了幾個checkbox項:
All
Users
Groups
Computers
我要實現(xiàn)當(dāng)勾選了"All"時,其它的項也全勾選,而只要"users/groups/computers"中任何一項沒有勾選時,"All"項也不勾選.
我在listview的ItemCheck事件中加了類似下面的代碼,并實現(xiàn)了功能:
if (e.NewValue == CheckState.Checked)
{
//...如果勾選了"ALL"
foreach (ListViewItem taskItem in m_tasksList.Items)
{
if ((((Task)taskItem.Tag).TaskObject != Task.TaskObjectEnum.All) && (taskItem.Checked == false))
{
taskItem.Checked = true; //******
}
}
}
}
現(xiàn)在大問題來了: 當(dāng)我選了"All"時,程序運(yùn)行到:taskItem.Checked = true;這個時候又會再次觸發(fā)ListView的ItemCheck事件,而我的事件內(nèi)有循環(huán).這樣,導(dǎo)致有時候程序崩潰.
請問有什么好的辦法來實現(xiàn)這樣的功能呀?感謝!
解答:
if (e.NewValue == CheckState.Checked)
{
//...如果勾選了"ALL"
m_tasksList.ItemCheck -= new EventHandler(m_tasksList_ItemCheck);//Add
foreach (ListViewItem taskItem in m_tasksList.Items)
{
if ((((Task)taskItem.Tag).TaskObject != Task.TaskObjectEnum.All) && (taskItem.Checked == false))
{
taskItem.Checked = true; //******
}
}
m_tasksList.ItemCheck += new EventHandler(m_tasksList_ItemCheck);//Add
}
}