【发布时间】:2018-01-06 16:14:10
【问题描述】:
我正在尝试为我的表单上除按钮之外的所有控件订阅MouseUp 事件。我使用一个循环来订阅所有可以正常工作的控件。但是我希望能够在多个表单上使用此函数,因此我不想总是为事件订阅相同的函数,而是希望将函数作为参数传递。所以我创建了一个委托,但我收到了这个错误:
Cannot implicitly convert type 'namespace.frmSettings.MouseUpDelegate' to 'System.Windows.Forms.MouseEventHandler'
您能否告诉我我正在尝试做的事情是否可行,如果可以,我做错了什么?这是我的代码:
public frmSettings()
{
InitializeComponent();
//Subscribe to MouseUp events for key binds
SubscribeMouseClicks(this, new MouseUpDelegate(frmSettings_MouseUp));
}
private delegate void MouseUpDelegate(object sender, MouseEventArgs e);
private void SubscribeMouseClicks(Control parentControl, MouseUpDelegate mouseUpDelegate)
{
foreach (Control ctrl in parentControl.Controls)
{
if (ctrl.GetType() != typeof(Button))
{
ctrl.MouseUp += mouseUpDelegate; //This line causes the error. If I change mouseUpDelegate to frmSettings_MouseUp it works
if (ctrl.HasChildren)
{
SubscribeMouseClicks(ctrl, mouseUpDelegate);
}
}
}
}
我尝试过寻找答案,但找不到我要找的东西。
任何帮助将不胜感激。
【问题讨论】:
-
只需使用
MouseEventHandler,您现在使用MouseUpDelegate。如果可以使用提供的委托类型,则不需要自己的委托类型。 -
谢谢,但这也不起作用。现在它说它无法将
frmSettings.MouseEventHandler转换为System.Windows.Forms.MouseEventHandler。
标签: c# events delegates event-handling