如何将相同的事件处理程序附加到Winforms/.NET/C#中的其他控件?
我随机尝试了完美的逻辑代码来实现我想要的结果,但不幸的是,语法在C#中无效:
public MainForm()
{
InitializeComponent();
FixPanelMouseEnter(pnlActionCenter);
FixPanelMouseEnter(pnlAdministrativeTools);
FixPanelMouseEnter(pnlAutoPlay);
FixPanelMouseEnter(pnlBackupAndRestore);
//...snip 49 lines...
FixPanelMouseEnter(pnlWFirewall);
FixPanelMouseEnter(pnlWLiveLanguageSettings);
FixPanelMouseEnter(pnlWUpdate);
}
private void FixPanelMouseEnter(Panel panel)
{
foreach (Control ctrl in panel.Controls)
ctrl.MouseEnter += panel.MouseEnter;
}此无效代码导致语法错误。
事件'System.Windows.Forms.MouseEnter‘只能出现在+=或-=的左侧
在本例中,如果鼠标进入面板中的任何控件,我希望面板的MouseEnter事件触发。
How do i attach the same event handler to additional controls in Winforms/.NET/C#?
我试过的代码没有编译。
相关问题
发布于 2011-11-17 20:13:41
更改:
ctrl.MouseEnter += panel.MouseEnter;至
ctrl.MouseEnter += panel_MouseEnter;假设void panel_MouseEnter方法已经存在于代码中。
我认为你也需要通过EventHandler:
private void FixPanelMouseEnter(Panel panel, EventHandler enterMethod) {
foreach (Control ctrl in panel.Controls)
ctrl.MouseEnter += enterMethod;
}然后根据你的代码:
FixPanelMouseEnter(pnlActionCenter, pnlActionCenter_MouseEnter);但同样,pnlActionCenter_MouseEnter必须已经存在。讲得通?
发布于 2011-11-17 20:14:12
如果panel.MouseEnter的事件处理程序称为panel_MouseEnter,请使用以下代码:
private void FixPanelMouseEnter(Panel panel)
{
foreach (Control ctrl in panel.Controls)
ctrl.MouseEnter += panel_MouseEnter;
}注意,事件处理程序需要是一个方法,而不是一个事件。
此方法(可以是匿名方法)需要符合EventHandler委托签名- void EventHandler(Object sender, EventArgs e)。
更新:
我现在明白你想要达到的目标了。
下面是让您的代码工作的一种方法:
private void FixPanelMouseEnter(Panel panel, EventHandler commonHandlerForPanel)
{
foreach (Control ctrl in panel.Controls)
ctrl.MouseEnter += commonHandlerForPanel;
}发布于 2011-11-17 20:18:16
您不能导致事件发生。您可以做的最好的事情是通过使用以下内容将相同的处理程序附加到所有事件:
ctrl.MouseEnter += panel1_MouseEnter;在您的循环中,panel1_MouseEnter是事件处理程序。即使您希望递归地这样做,也有可能,例如,如果您有嵌套面板。
https://stackoverflow.com/questions/8173583
复制相似问题