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

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

问题描述:

我正在寻找简化以下操作:单击一个面板,面板将其颜色更改为绿色,如果它是绿色,则将其更改为灰色。我想知道如何将控件作为参数写入方法,以便它可以用于任何控件而不必复制事件方法。C#简化点击事件方法以包含其他控件

通常情况下:面板中点击事件

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 
} 

什么是这个伪代码到工作的准确等值?

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

+1

在事件方法中包含'object sender'参数,将其转换为面板并更改其颜色? – schroedingersKat

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

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); 

如果你定义自己的事件,只是使用这些代表作为第一个参数输入并传递事件的来源。

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

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