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

Rav*_*sha 2 c#

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

Gio*_*rgi 5

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


小智 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
   }   
}
Run Code Online (Sandbox Code Playgroud)

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

  • 当用户使用空格键切换选中状态时,您是否还添加了一个`OnKeyUp`处理程序? (7认同)