C#简化点击事件方法以包含其他控件

时间:2017-04-20 07:31:38

标签: c# colors onclick panel

我希望简化以下操作:单击面板,面板将其颜色更改为绿色,如果为绿色,则将其更改为灰色。我想知道如何将控件作为参数写入方法,以便它可以适用于任何控件而无需复制事件方法。

通常:面板点击事件

panel_Click ()
   //some if statement
   panel1.BackColor = green
   panel1.BackColor = gray

然后重复每个控件。而不是这个,我会创建一个所有控件都订阅的中心方法,读取面板的名称,如:

genericpanel_Click(){
  ChangeColor(thisPanelname);
}

然后会使用参数/参数:

public void ChangeColor(panel? Mypanel) {
  //some if...
  Mypanel.BackColor = Green
  Mypanel.BackColor = Gray
}

这个伪代码与工作代码的确切等价是什么?

编辑:好的,是的,我现在可以看到它是重复的,不需要进一步下调。我只是不知道具体搜索什么。无论如何,我现在找到了答案。

2 个答案:

答案 0 :(得分:1)

控件的所有事件都将其源作为第一个参数。您只需将其转换为正确的类型:

void panel_Click(object sender, EventArgs e) {
    Panel myPanel = (Panel)sender;
    ChangeColor(myPanel);
}

事件处理程序委托的所有定义都提供发件人,例如:

public delegate void EventHandler(object sender, EventArgs e);
public delegate void EventHandler<T>(object sender, T e);

如果您定义自己的事件,只需使用这些委托类型并将事件源作为第一个参数传递。

答案 1 :(得分:1)

您可以订阅此方法的所有面板:

private void panel_Click(object sender, EventArgs e)
{
    Panel clickedPanel = sender as Panel;
    if ( clickedPanel != null )
    {
        if ( clickedPanel.BackColor == Color.Blue )
        {
            clickedPanel.BackColor = Color.Red;
        }
        else 
        {
            clickedPanel.BackColor = Color.Blue;
        }
    }
}

如果您只订购了面板,即使不需要进行第一次检查,也要确保其安全。

此方法接收发件人(激活事件的面板)并检查其背景颜色。如果颜色A设置为颜色B - >别的颜色A

相关问题