我在listview中加入了几个checkbox项:
All
Users
Groups
Computers我要实现当勾选了"All"时,其它的项也全勾选,而只要"users/groups/computers"中任何一项没有勾选时,"All"项也不勾选.我在listview的ItemCheck事件中加了类似下面的代码,并实现了功能:
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; //******
                        }
                    }
                }
            }现在大问题来了: 当我选了"All"时,程序运行到:taskItem.Checked = true;这个时候又会再次触发ListView的ItemCheck事件,而我的事件内有循环.这样,导致有时候程序崩溃.请问有什么好的办法来实现这样的功能呀?感谢!

解决方案 »

  1.   

    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                }
                }