C# 简化单击事件方法以包含其他控件
C# Simplifying a click event method to include other controls
我想简化以下操作:单击面板,面板将其颜色更改为绿色,如果是绿色,则将其更改回灰色。我想知道如何将控件作为参数写入方法,以便它可以用于任何控件而无需复制事件方法。
通常:面板点击事件
panel_Click ()
//some if statement
panel1.BackColor = green
panel1.BackColor = gray
然后每个对照重复。取而代之的是,我会创建一个所有控件都订阅的中央方法,读取面板的名称,如:
genericpanel_Click(){
ChangeColor(thisPanelname);
}
然后这将利用 argument/parameter:
public void ChangeColor(panel? Mypanel) {
//some if...
Mypanel.BackColor = Green
Mypanel.BackColor = Gray
}
此伪代码与有效代码的准确等价物是什么?
编辑:好的,是的,我现在可以看到它是重复的,无需进一步否决。我只是不知道具体要搜索什么。不管怎样,我现在已经找到了答案。
控件的所有事件都将其源作为第一个参数提供。您只需将其转换为正确的类型即可:
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
我想简化以下操作:单击面板,面板将其颜色更改为绿色,如果是绿色,则将其更改回灰色。我想知道如何将控件作为参数写入方法,以便它可以用于任何控件而无需复制事件方法。
通常:面板点击事件
panel_Click ()
//some if statement
panel1.BackColor = green
panel1.BackColor = gray
然后每个对照重复。取而代之的是,我会创建一个所有控件都订阅的中央方法,读取面板的名称,如:
genericpanel_Click(){
ChangeColor(thisPanelname);
}
然后这将利用 argument/parameter:
public void ChangeColor(panel? Mypanel) {
//some if...
Mypanel.BackColor = Green
Mypanel.BackColor = Gray
}
此伪代码与有效代码的准确等价物是什么?
编辑:好的,是的,我现在可以看到它是重复的,无需进一步否决。我只是不知道具体要搜索什么。不管怎样,我现在已经找到了答案。
控件的所有事件都将其源作为第一个参数提供。您只需将其转换为正确的类型即可:
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