KeyUp - 触发两次

KeyUp - triggering twice

我的 KeyUp 和 KeyDown 事件在我调用它们时都触发了两次。终于找到了解决办法:

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

它有效,但我真的不明白为什么。谁能给我解释一下。

谢谢

您可能有一些重复事件,您将其用作连接事件处理程序的触发器,一个典型的例子是按钮单击,例如

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

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

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

this.SomeControl.KeyUp -= this.SomeHandler;

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