如何将事件附加到类的已创建对象而不是创建新事件

时间:2015-05-11 07:58:42

标签: c#

我有' MainWindow'形式是一个MdiContainer和一组按钮,button1加载' DesignTools'作为子形式的形式,这也有一些按钮。两个表单上都有一些常用按钮。将事件附加到子表单上的按钮,并希望从' MainWindow'的按钮引发相同的事件。将事件附加到新创建的对象不会产生任何结果,如下所示。因此,尝试将事件附加到已创建的' MainWindow' ,但无法找到办法。 我有:

MainWindow.cs
public class MainWindow :Form
 {
    public event EventHandler event1 = delegate { }; 
    public MainWindow  mainWindowSM{get;set;}
    public PEMainWindow()
    {
      InitializeComponent();
        ...
    }
    InitializeComponent()
    {
      .....
      this.BtnNudgeDown.Click += new System.EventHandler(this.event1);
      this.mainWindowSM = new MainWindow();
    }
    private void BtnDesignTools_Click(object sender, EventArgs e)
    {
      DesignTools designer = new DesignTools();
    }
 }

我有DesignTools.cs

public class DesignTools : Form 
{ 
 public DesignTools()
 {
  MainWindow mainWindow = new MainWindow(); //Creating new instance of MainWindow, I think this doesn't work
  mainWindow.event1 += this.BtnNudgeDown_Click;
 }
 private void BtnNudgeDown_Click(object sender, EventArgs e)
 {
    ...
 }
}

此尝试不会引发此事件。 如何将事件附加到已创建的对象?尝试在MainWindow中创建一个属性并将对象设置为该属性,但它再次成为新对象。

1 个答案:

答案 0 :(得分:0)

你可以试试这个。实例化designtools(一次) 并调用btnNudgeDown_click

MainWindow.cs
public class MainWindow :Form
 {
    DesignTools designer;
    public event EventHandler event1 = delegate { }; 
    public MainWindow  mainWindowSM{get;set;}
    public PEMainWindow()
    {
      InitializeComponent();
        ...
    }
    InitializeComponent()
    {
      .....          
      this.mainWindowSM = new MainWindow();
    }
    private void BtnDesignTools_Click(object sender, EventArgs e)
    {
      if (designer == null)
      {
          designer = new DesignTools();
      }

      designer.BtnNudgeDown_Click(this, e);
    }
 }

public class DesignTools : Form 
{ 
 public DesignTools()
 {

 }
 private void BtnNudgeDown_Click(object sender, EventArgs e)
 {
    ...
 }
}