0

抱歉,这是一个初学者的问题,但我没有通过。我有一个带有 4 个面板控件的 Windows 窗体应用程序。现在我希望当用户用鼠标悬停时面板改变它们的背景。我试过以下:

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 功能?如果是,如何?

4

5 回答 5

3

你应该投它:

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

并将这一功能用于所有 4 个面板作为事件处理程序

于 2013-02-25T10:26:45.910 回答
3

您可以将您的发件人对象投射到面板上

Panel panel = (Panel)sender;
if(panel != null)
// Set the BackColor
于 2013-02-25T10:28:12.200 回答
3

您应该首先将 sender 对象转换为 Panel :

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

panel.BackColor = Blue;
于 2013-02-25T10:28:16.317 回答
1

MouseIn您可以为andMouseOut然后定义一个 EventHandler

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

于 2013-02-25T10:29:00.190 回答
0

在鼠标和功能中删除您放置的所有代码并在下面编写一行简单的代码并尝试它会起作用

((Control)sender).BackColor = Color.Red;
于 2020-10-24T03:47:48.650 回答