2013-02-25 113 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