我希望简化以下操作:单击面板,面板将其颜色更改为绿色,如果为绿色,则将其更改为灰色。我想知道如何将控件作为参数写入方法,以便它可以适用于任何控件而无需复制事件方法。
通常:面板点击事件
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
}
这个伪代码与工作代码的确切等价是什么?
编辑:好的,是的,我现在可以看到它是重复的,不需要进一步下调。我只是不知道具体搜索什么。无论如何,我现在找到了答案。
答案 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