KeyUp - 触发两次

时间:2015-07-04 13:57:55

标签: c# winforms events keyup

有一个问题,我的KeyUp和KeyDown事件在我调用它们时都触发了两次。终于找到了解决方法:

  this.glControl1.KeyUp -= this.glControl1_KeyUp;
  this.glControl1.KeyUp += new KeyEventHandler(this.glControl1_KeyUp);

它有效,但我真的不明白为什么。任何人都可以解释一下。

谢谢

1 个答案:

答案 0 :(得分:1)

你可能有一些重复的事件,你用它作为触发器来连接你的事件处理程序,一个典型的例子是按钮点击,例如。

public void ButtonClick(object sender, EventArgs e)
{
    this.SomeControl.KeyUp += this.SomeHandler;
}

这里的问题是每次点击按钮时,同一事件处理程序被分配给同一事件,没有什么可以防止这种情况发生,因为在某些情况下它是完全可以接受的。

为避免这种情况,您需要在重新分配之前取消挂钩事件处理程序,这就是执行以下代码行的原因

this.SomeControl.KeyUp -= this.SomeHandler;

在分配事件处理程序之前,防止重复调用。