2015-07-04 254 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; 

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