更改复选框值而不引发事件

时间:2010-01-21 11:24:49

标签: c#

我想在不提高onCheck事件的情况下更改Checkbox值。 我知道有一些工作,比如取消注册,更改值然后重新注册, 在基于flag的事件方法内部,可以跳过或评估方法语句 或任何其他工作。 我正在寻找一种更清洁的方式。

3 个答案:

答案 0 :(得分:5)

我知道这是一个老话题,但给出的答案太麻烦了 我几乎从不使用OnCheckedChanged事件。我更喜欢使用OnMouseUp。这样,您可以在启动时设置复选框或单选按钮,而不会触发事件。

在OnMouseUp事件中检查是否在mouseUp发生后检查该框是否正确..

private void chkBox1_MouseUp(object sender, MouseEventArgs e)
{
   if (chkBox1.Checked)
   {
      // do some stuff if the box is checked after a mouseup on it
   }   
}

我这样做了很长时间。将标志变量放在OnChanged事件中以告诉函数在我们设置框状态时不做任何事情是一件很麻烦的事。使用MouseUp更容易。 GC

答案 1 :(得分:3)

您可以从CheckBox类派生,重写CheckBox.OnCheckedChanged Method 并且不调用基类的OnCheckedChanged方法,并且不会触发该事件。您还可以拥有一个属性,指示是否应该引发该事件。

答案 2 :(得分:0)

删除并重新分配处理程序:

myCheckbox.Checked -= myCheckbox_Checked;
myCheckbox.IsChecked = true;
myCheckbox.Checked += myCheckbox_Checked;