我会将表单的控件传递给另一个类,在那里我将为控件、其父控件等创建事件。我还需要在某些时候分离这些事件。但我需要确保我不会重复这些事件,如果事件已经附加。
所以我总是附加这样的事件,例如:
internal static void X(Control c, MouseEventHandler mouseDownEvent)
{
c.TopLevelControl.MouseDown -= mouseDownEvent;
c.TopLevelControl.MouseDown += mouseDownEvent;
}
现在我也需要为其他处理程序附加类似的事件。例如,
internal static void X(Control c, EventHandler event)
{
c.Enter -= event;
c.Enter += event;
}
现在我不想到处乱说-=
,+=
而是想拥有一个简单的实用功能,以便我可以在任何地方调用它。
就像是:
internal static void AttachEvent(this Control c,
Func<Control, MouseEventHandler> e,
MouseEventHandler m)
{
e(c) -= m;
e(c) += m;
}
这样我就可以打电话了:
AttachEvent(c, control => control.MouseDown, mouseDownEvent);
但这不会编译,我得到两个错误:
The event 'System.Windows.Forms.Control.MouseDown' can only appear on the left hand side of += or -=
和
The left-hand side of an assignment must be a variable, property or indexer
我希望将AttachEvent
任何事件作为输入参数,但如果这太复杂,我可以单独使用 MouseEvents。