有一个问题,我的KeyUp和KeyDown事件在我调用它们时都触发了两次。终于找到了解决方法:
this.glControl1.KeyUp -= this.glControl1_KeyUp;
this.glControl1.KeyUp += new KeyEventHandler(this.glControl1_KeyUp);
它有效,但我真的不明白为什么。任何人都可以解释一下。
谢谢
答案 0 :(得分:1)
你可能有一些重复的事件,你用它作为触发器来连接你的事件处理程序,一个典型的例子是按钮点击,例如。
public void ButtonClick(object sender, EventArgs e)
{
this.SomeControl.KeyUp += this.SomeHandler;
}
这里的问题是每次点击按钮时,同一事件处理程序被分配给同一事件,没有什么可以防止这种情况发生,因为在某些情况下它是完全可以接受的。
为避免这种情况,您需要在重新分配之前取消挂钩事件处理程序,这就是执行以下代码行的原因
this.SomeControl.KeyUp -= this.SomeHandler;
在分配事件处理程序之前,防止重复调用。