2013-02-25 136 views
0

對不起,這是一個初學者的問題,但我沒有通過。 我有一個Windows窗體應用程序,它有4個面板控件。現在我想讓用戶在用鼠標懸停時改變背景。我曾嘗試以下操作:控制懸停顏色

private void Panel1_MouseIn(object sender, EventArgs e) 
{ 
    panel1.BackColor = Color.Red; 
} 

private void Panel1_MouseOut(object sender, EventArgs e) 
{ 
    panel1.BackColor = Color.Blue; 
} 

即工作正常,但因爲我有4個小組,而不是一個我必須添加這樣6個功能......在我試圖使一個單一的功能適用於所有的他們但事件發件人沒有可訪問的BackColor屬性。

有沒有辦法爲所有面板製作一個MouseIn函數? 如果是,如何?

回答

3

,你應該將其丟:

private void Panel_MouseIn(object sender, EventArgs e) 
{ 
    Panel pan = sender as Panel; 
    pan.BackColor = Color.Red; 
} 

並使用這一功能對所有4塊板作爲事件處理

3

你可以投你發送對象到面板一樣

Panel panel = (Panel)sender; 
if(panel != null) 
// Set the BackColor 
+0

爲什麼你檢查它是否爲空? null發件人不能生成事件。 – VladL 2013-02-25 10:31:29

+0

我檢查它以確保不訪問非面板元素。它可能是例如一個按鈕或其他東西想要對這個事件作出反應。 這是一個習慣,檢查一個鑄造對象befor使用它 – Tomtom 2013-02-25 10:33:31

+0

嗯,我只是希望程序員不處理按鈕事件與面板處理程序:) – VladL 2013-02-25 10:39:10

3

您應首先將發件人對象投射到面板上:

Panel panel = sender as Panel; 
if (panel == null) 
    return; 

panel.BackColor = Blue; 
1

你可以定義事件處理程序的MouseInMouseOut然後

private void Panel1_MouseIn(object sender, EventArgs e) 
{ 
    Panel p = sender as Panel; 
    if(p == panel1){ 
     //set color 
    } 
    else if(p == panel2){ 
     //set color 
    } 
... 
} 

同爲MouseOut

+0

錯誤,沒有必要爲每個面板。發件人是對產生事件的對象的引用 – VladL 2013-02-25 10:44:17

+0

是的,所以你可以使用ONE事件處理程序,並且在該事件處理程序中,決定特定面板應獲取哪種顏色。 – 2013-02-25 10:55:29

+0

尋找OP的代碼我可能會建議他試圖改變MouseIn或MouseOut上的一個面板 – VladL 2013-02-25 11:01:20