KeyUp-触发两次

本文关键字:两次 KeyUp- | 更新日期: 2023-09-27 18:00:58

在调用KeyUp和KeyDown事件时出现了两次触发的问题。终于找到了解决方案:

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

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

感谢

KeyUp-触发两次

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

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

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

为了避免这种情况,您需要在重新分配事件处理程序之前取消挂起它,这就是为什么执行以下代码行

this.SomeControl.KeyUp -= this.SomeHandler;

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