winforms 在不同的类中提供相同的点击事件

h7wcgrx3  于 2023-05-07  发布在  其他
关注(0)|答案(1)|浏览(107)

我的计划是将GUI元素划分到一个类中,并有一个类,在这个类中,这些GUI元素将显示或放置在主窗体/用户控件上。那么,当我想在GUI元素中使用一个click处理程序,但它原来是放在mainform/usercontrol中时,我该怎么做呢?或者换句话说:如果可以通过paramter为GUI元素类构造函数提供click eventHandler,我如何在GUI元素中访问它,或者创建一个可以在GUI元素中使用的引用?
希望你明白我的原始目标是什么。

**补充:**因为我们在同一个命名空间,是否可能出现以下情况?我发现在历史和尝试,它的工作,但涉及的类是一个Usercontrol和它的主窗体(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) {}
  ...
}

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

f87krz0w

f87krz0w1#

当注册一个事件处理程序时,它不必在同一个类中,你可以在其他对象上使用一个方法。
还要注意编译器应该能够转换“方法组”,即一个方法的名称,传递给一个兼容的委托,而不需要显式地创建一个EventHandler:

gE.ButtonClickedHandler += gE.ButtonClickHandler;

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

public void ClickEventHandler(object sender, EventArgs e) 
    => gE.ButtonClickHandler(sender, e)

相关问题