2013-01-17 83 views
0

確切地說,我必須在哪裏寫這段代碼?在哪個代碼文件中,我應該將事件處理程序分配給哪個文件以控制?

button1.MouseHover += Common_MouseHover; 

問題是我想聲明一個事件處理程序並指向它的每個按鈕。這是常見的處理程序:

private void Common_MouseHover(object sender, EventArgs e) 
{ 
    Button btn = sender as Button; 
    if (btn != null) 
     btn.Image = pic 
} 

但我不知道我必須寫:

button1.MouseHover += Common_MouseHover; 
utton2.MouseHover += Common_MouseHover; 
.. etc 

在設計師?究竟在哪裏?

+1

這是的WinForms? WPF? – ryadavilli

+0

in c#win forms – bunNyBug

+0

我已閱讀此: http://stackoverflow.com/questions/10739572/how-make-one-event-handler-that-applies-to-multiple-controls-in-c/10739628# 10739628 並沒有理解最後一部分,我想解釋哪裏寫最後的代碼? – bunNyBug

回答

3

可以在設計器或窗體的構造函數中創建,也可以在創建時創建動態按鈕。

public Form1() 
{ 
    InitializeComponent(); 

    button1.MouseHover += new EventHandler(Common_MouseHover); 
    button2.MouseHover += new EventHandler(Common_MouseHover); 

} 

如果在Property Editor中。

enter image description here

+0

抱歉,因爲是新手,但我不明白在設計師的位置... – bunNyBug

+0

如果你看看按鈕的屬性編輯器,你會看到一個小閃電在頂部,點擊。它會顯示可用的事件,在此時您可以添加常用處理程序。我將張貼圖片爲例。 –

+0

坦克你非常感謝你的幫助,我終於明白了 – bunNyBug

0

從技術上講,當你想爲它分配它依賴。例如,您可能不希望該事件被該方法處理,直到符合某些條件:然後在條件爲真時分配事件處理程序。

請記住,如果您不小心,分配事件處理程序可能導致內存泄漏。例如,您可能有一個計時器不斷地爲事件分配相同的事件處理程序。您需要檢查事件是否已經有事件處理程序,或者它是否爲空,或者需要防止重複的任何事情。您可能還想使用 - =運算符動態刪除事件處理程序。

對於給出的例子,表單的構造函數似乎是正確的,並且是手動分配事件處理程序最常見的地方。

0

呼叫表單中的以下功能ConstructorInitializeComponent(); -

private void init() 
    { 
     foreach (Control ctrl in this.Controls) 
     { 
      if (ctrl is Button) 
      { 
       (ctrl as Button).MouseHover += new EventHandler(Common_MouseHover); 
      } 
     } 
    } 

這樣稱呼它 -

// Form Constructor 
    public Form3() 
    { 
     InitializeComponent(); 
     Init(); 
    } 
相關問題