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

标签 c# .net winforms

如何将相同的事件处理程序附加到 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;
}

无效代码导致语法错误:

The event 'System.Windows.Forms.MouseEnter' can only appear on the left hand side of a += or -=

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

How do i attach the same event handler to additional controls in Winforms/.NET/C#?

我试过的代码无法编译。

相关问题

最佳答案

改变:

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

关于c# - Winforms:如何将事件处理程序附加到其他控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8173583/

相关文章:

c# - 无法执行项目,COM 组件有问题

c# - 如何从字符串的开头和结尾删除所有非字母数字和数字字符?

winforms - 如何以编程方式向表单添加控件?

c# - DataGridView HeaderCell 为数字类型时不显示值

c# - 如何访问传递给构造函数的 ref bool 变量?

c# - 在多个表单上重写 ProcessDialogKey 方法

C# 应用程序在开发机器上运行,在非开发机器上失败

Java 事件绑定(bind)问题绑定(bind)库

c# - 使用包含的 xsd 文件编译模式

.net - 从 .net 代码更改音量