Winforms:如何将事件处理程序附加到其他控件

本文关键字:其他 控件 程序 事件处理 Winforms | 更新日期: 2023-09-27 18:14:55

如何将相同的事件处理程序附加到Winforms/. net/c#中的其他控件?


i 随机尝试完美的逻辑代码来完成我想要的,但不幸的是语法在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. forms"。MouseEnter'只能出现在+=或-=

的左侧

在这个例子中,我希望面板的MouseEnter事件触发,如果鼠标进入面板中的任何控件。

如何将相同的事件处理程序附加到Winforms/. net/c#中的其他控件?

我尝试的代码无法编译。

相关问题
  • WinForms:当鼠标进入控件时,如何导致MouseEnter触发?
  • 。如何检查鼠标是否在控件中?

Winforms:如何将事件处理程序附加到其他控件

变化:

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必须已经存在。有意义吗?

无法触发事件。您能做的最好的事情是使用如下方式将相同的处理程序附加到所有事件:

ctrl.MouseEnter += panel1_MouseEnter;

内的循环,其中panel1_MouseEnter是事件处理程序。在嵌套面板的情况下,您甚至可以递归地执行此操作,例如

如果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;
}