2015-07-04 204 views
-1

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

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

它的工作原理,但我真的不能理解为什么。任何人都可以解释我。

谢谢

+0

这很大程度上取决于这两行代码的调用位置。你将不得不提供更多的上下文。 – sstan

+3

您可能多次触发'KeyUp + = ...',这意味着您最终连接两次相同的事件处理程序,事先将其删除,以确保您只有一个'glControl1_KeyUp'事件处理程序被分配。 – James

回答

1

你可能有您使用作为触发挂钩事件处理一些重复的事件,一个典型的例子就是点击一个按钮例如

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

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

为了避免这种情况,你需要重新分配它之前解开事件处理程序,这就是为什么执行的代码

this.SomeControl.KeyUp -= this.SomeHandler; 

以下行之前,您所分配的事件处理程序防止重复呼叫。