2013-04-25 49 views
1

我有一个ListView各种项目,如低于ItemCheck处理程序:ListViewItem的检查,而不是由程序

private void ListView1_ItemCheck(object sender, ItemCheckEventArgs e) 
    { 
     if (e.NewValue == System.Windows.Forms.CheckState.Checked) 
     { 
      if (e.Index == 0) 
      { 
       ListView1.Items[1].Checked = false; 
       ListView1.Items[2].Checked = false; 
       ListView1.Items[3].Checked = false; 
       ListView1.Items[4].Checked = false; 
       ListView1.Items[5].Checked = false; 
       ListView1.Items[6].Checked = false; 
       ListView1.Items[7].Checked = false; 
      } 
      else 
      { 
       ListView1.Items[0].Checked = false; 
      } 
     } 
    } 

本质上的第一个项目是“无”,所以当它被选中的所有其他项目变得不受检查(反之亦然)。有时程序检查代码中的项目,我认为这是造成问题的原因。我知道TreeViewEventArgs有一个名为Action的字段,如果该呼叫来自程序而不是来自用户,则该字段等于TreeViewAction.Unkown

有没有办法检查用户是否正在检查ListViewItem而不是通过代码检查?

回答

2

有没有办法从事件参数告诉,所以你必须代码为它自己,像

 private bool raisedFromCode; 

    private void button2_Click(object sender, EventArgs e) 
    { 
     raisedFromCode = true; 
     listView1.Items[1].Checked = !listView1.Items[1].Checked; 
     raisedFromCode = false; 
    } 

    private void listView1_ItemCheck(object sender, ItemCheckEventArgs args) 
    { 

     if (!raisedFromCode) 
      MessageBox.Show("User checked"); 

    } 

另外,如果你不希望你的逻辑,当你通过改变检查状态火代码,您可以取消订阅事件处理程序

 listView1.ItemCheck -= new ItemCheckEventHandler(this.listView1_ItemCheck); 
     listView1.Items[1].Checked = false; 
     listView1.ItemCheck += new ItemCheckEventHandler(this.listView1_ItemCheck); 
相关问题