相同的点击事件可用于不同的类

问题描述 投票:0回答:1

我的计划是将 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) {}
  ...
}

只是一个很好的例子,有助于理解必须如何完成的原则。

c# winforms class handler
1个回答
0
投票

当注册一个事件处理程序时,它不必在同一个类中,你可以在其他对象上使用一个方法就好了。

另请注意,编译器应该能够将“方法组”(即方法名称)转换为兼容的委托,而无需显式创建 EventHandler:

gE.ButtonClickedHandler += gE.ButtonClickHandler;

或者您可以在本地处理程序中转发事件

public void ClickEventHandler(object sender, EventArgs e) 
    => gE.ButtonClickHandler(sender, e)
© www.soinside.com 2019 - 2024. All rights reserved.