简体   繁体   English

创建EventHandler并从另一个类监听Event

[英]Create EventHandler and listen to Event from another class

I've created event as bellow and want to listen to it and execute method in another class when it fires but saveEvent always comes to be null and it doesn't fire I don't know what I've missed 我已经将事件创建为波纹管,并希望在发生事件时监听它并在另一个类中执行方法,但saveEvent总是为null且不会发生,我不知道我错过了什么

here's my first class has button 这是我的第一堂课有按钮

internal partial class OpenSaveReportWizardForm : Form
{
public event EventHandler saveEvent;
private void saveButton_Click(object sender, EventArgs e)
{
  saveEvent?.Invoke(this, e); 
}
}

and here's the second class where I want to listen to saveEvent 这是我想听saveEvent的第二堂课

 internal class Database
 {
  public Database()
  { 
        Program._wizardForm.saveEvent += (sender, e) => HandleSaveMethod( );

  }

public void HandleSaveMethod()
  {
   // do something
  }

here's where I open the form 这是我打开表格的地方

internal  class Program
{
  public static OpenSaveReportWizardForm _wizardForm;
  private static void Main()
  {
  OpenFileCommandHandler();
  }

void OpenFileCommandHandler()
     { 
        _wizardForm = new OpenSaveReportWizardForm( );

        _wizardForm.ShowDialog(); 
     }
 }

Because you disposed wizardForm, after that event is cleared. 因为您已处置了WizardForm,所以清除了该事件。 You should write next code: 您应该编写下一个代码:

 internal class Database
 {
    private bool _isDisposed;
    private OpenSaveReportWizardForm _wizardForm;

  public Database()
  {
      _wizardForm = new  OpenSaveReportWizardForm(m_Opening,m_ConnectionProperties,m_ColumnProperties))
      _wizardForm.saveEvent += (sender, e) => HandleSaveMethod( );

  }

public void HandleSaveMethod()
  {
   // do something
  }

  public void Dispose()
  {
    if(_isDisposed)
        return;

    _isDisposed = true;

    _wizardForm.saveEvent -= HandleSaveMethod;
    _wizardForm.Dispose();
  }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM