我正在尝试为我的表单上的所有控件订阅Int
事件,但Buttons除外。我使用循环来订阅所有控件,它们工作正常。但我希望能够在多个表单上使用此函数,因此我不想总是为事件订阅相同的函数,而是希望将函数作为参数传递。所以我创建了一个委托,但是我收到了这个错误:
MouseUp
你能否告诉我,我想做的事情是否可行,若然,我做错了什么?这是我的代码:
Cannot implicitly convert type 'namespace.frmSettings.MouseUpDelegate' to 'System.Windows.Forms.MouseEventHandler'
我已经尝试过寻找答案但找不到我要找的东西。
非常感谢任何帮助。
答案 0 :(得分:1)
您无需声明全新的委托来执行此操作。 MouseUp
事件是使用委托类型MouseEventHandler
定义的。这意味着您只需要存储MouseEventHandler
。
请删除此声明:
private delegate void MouseUpDelegate(object sender, MouseEventArgs e);
并编写如下方法:
private void SubscribeMouseClicks(Control parentControl, MouseEventHandler eventHandler)
{
foreach (Control ctrl in parentControl.Controls)
{
if (ctrl.GetType() != typeof(Button))
{
ctrl.MouseUp += eventHandler;
if (ctrl.HasChildren)
{
SubscribeMouseClicks(ctrl, eventHandler);
}
}
}
}
并称之为:
SubscribeMouseClicks(this, frmSettings_MouseUp);