listview中checkbox选择的一个技巧

2010-08-28 10:50:01来源:西部e网作者:

提问:

我在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事件,而我的事件内有循环.这样,导致有时候程序崩溃.  
   
  请问有什么好的办法来实现这样的功能呀?感谢!

解答:

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

关键词:C#