我的计划是将 GUI 元素放在一个类中,并拥有一个类,这些 GUI 元素将在主窗体/用户控件上显示或放置。 那么当我想在 GUI 元素中使用单击处理程序但原始放置在 mainform/usercontrol 中时,我必须做什么? 或者换句话说:如果可以通过参数向 GUI 元素类构造函数提供点击事件处理程序,我如何在 GUI 元素内访问它或创建可在 GUI 元素内使用的引用?
希望你明白我最初的目标是什么。
加法: 由于我们在同一个命名空间中,是否可能出现以下情况?我在历史上发现并尝试过并且它有效,但涉及的类是用户控件及其主要形式(2 种形式)。
class GUI Elements {
public Event Eventhandler ButtenClickedHandler;
private void ButtonClickHandler(object sender, EventArgs e) {
if ( this.ButtonClickedHandler != null ) this.ButtonClickedHandler( sender, e )
}
}
class Example : Usercontrol/Form {
...
GUI Elements gE = new GUI Elements()
gE.ButtonClickedHandler += new EventHandler( ClickEventhandler )
public void ClickEventHandler(object sender, EventArgs e) {}
...
}
只是一个很好的例子,有助于理解必须如何完成的原则。
当注册一个事件处理程序时,它不必在同一个类中,你可以在其他对象上使用一个方法就好了。
另请注意,编译器应该能够将“方法组”(即方法名称)转换为兼容的委托,而无需显式创建 EventHandler:
gE.ButtonClickedHandler += gE.ButtonClickHandler;
或者您可以在本地处理程序中转发事件
public void ClickEventHandler(object sender, EventArgs e)
=> gE.ButtonClickHandler(sender, e)