首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Winforms:如何将事件处理程序附加到其他控件

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

Stack Overflow用户
提问于 2011-11-17 20:08:48
回答 3查看 1.8K关注 0票数 1

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

随机尝试了完美的逻辑代码来实现我想要的结果,但不幸的是,语法在C#中无效:

代码语言:javascript
运行
复制
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#?

我试过的代码没有编译。

相关问题

EN

回答 3

Stack Overflow用户

发布于 2011-11-17 20:13:41

更改:

代码语言:javascript
运行
复制
ctrl.MouseEnter += panel.MouseEnter;

代码语言:javascript
运行
复制
ctrl.MouseEnter += panel_MouseEnter;

假设void panel_MouseEnter方法已经存在于代码中。

我认为你也需要通过EventHandler:

代码语言:javascript
运行
复制
private void FixPanelMouseEnter(Panel panel, EventHandler enterMethod) {
  foreach (Control ctrl in panel.Controls)
    ctrl.MouseEnter += enterMethod;
}

然后根据你的代码:

代码语言:javascript
运行
复制
FixPanelMouseEnter(pnlActionCenter, pnlActionCenter_MouseEnter);

但同样,pnlActionCenter_MouseEnter必须已经存在。讲得通?

票数 2
EN

Stack Overflow用户

发布于 2011-11-17 20:14:12

如果panel.MouseEnter的事件处理程序称为panel_MouseEnter,请使用以下代码:

代码语言:javascript
运行
复制
private void FixPanelMouseEnter(Panel panel)
{
    foreach (Control ctrl in panel.Controls)
        ctrl.MouseEnter += panel_MouseEnter;
}

注意,事件处理程序需要是一个方法,而不是一个事件。

此方法(可以是匿名方法)需要符合EventHandler委托签名- void EventHandler(Object sender, EventArgs e)

更新:

我现在明白你想要达到的目标了。

下面是让您的代码工作的一种方法:

代码语言:javascript
运行
复制
private void FixPanelMouseEnter(Panel panel, EventHandler commonHandlerForPanel)
{
    foreach (Control ctrl in panel.Controls)
        ctrl.MouseEnter += commonHandlerForPanel;
}
票数 1
EN

Stack Overflow用户

发布于 2011-11-17 20:18:16

您不能导致事件发生。您可以做的最好的事情是通过使用以下内容将相同的处理程序附加到所有事件:

代码语言:javascript
运行
复制
ctrl.MouseEnter += panel1_MouseEnter;

在您的循环中,panel1_MouseEnter是事件处理程序。即使您希望递归地这样做,也有可能,例如,如果您有嵌套面板。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8173583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档