C# 如何识别活动子窗体并激发一个通用方法(存在于每个子窗体中)?

C# 如何识别活动子窗体并激发一个通用方法(存在于每个子窗体中)?,c#,.net,winforms,mdi,C#,.net,Winforms,Mdi,我有一个主MDI表单和大约70个子表单,它们被初始化并显示 在运行时。一次可能会显示多个子表单。在每个 子窗体中有名为OK的按钮及其事件btnOk_clickobject sender、EventArgs e。 在父窗体中有一个名为Save的按钮,如果我们单击它,在 运行时应触发activeMDI子窗体事件btnOk_click 请在这个问题上帮助我 目前,我使用以下代码来解决这个问题 switch (ActiveMdiChild.GetType().Name) {

我有一个主MDI表单和大约70个子表单,它们被初始化并显示 在运行时。一次可能会显示多个子表单。在每个 子窗体中有名为OK的按钮及其事件btnOk_clickobject sender、EventArgs e。 在父窗体中有一个名为Save的按钮,如果我们单击它,在 运行时应触发activeMDI子窗体事件btnOk_click

请在这个问题上帮助我

目前,我使用以下代码来解决这个问题

 switch (ActiveMdiChild.GetType().Name)
            {
                case "frmSalesOrder":
                case "frmPurchaseOrder":
                case "frmSizeRatio":
                    break;
                case "frmUserGroup":
                    var _frmUserGroup = (frmUserGroup)this.ActiveMdiChild;
                    _frmUserGroup.btnOK.PerformClick();
                    _frmUserGroup = null;
                    break;
                case "frmUser":
                    var _frmUser = (frmUser)this.ActiveMdiChild;
                    _frmUser.btnOK.PerformClick();
                    _frmUser = null;
                    break;
谢谢
Joseph J

有很多方法可以做到这一点。您的是其中之一,但很难使用60个表单


无论如何,您可以让每个孩子订阅当您按save时它引发的事件

有很多方法可以做到这一点。您的是其中之一,但很难使用60个表单


无论如何,您可以让每个孩子订阅当您按save时它引发的事件

在这里,界面确实可以帮助您:

interface IChildSave {
  void SaveAction();
}
然后在每个子窗体中实现它:

public partial class Form1 : Form, IChildSave {

  public void SaveAction() {
    saveButton.PerformClick();
  }

  private void saveButton_Click(object sender, EventArgs e) {
    // save routine
  }
}
这样,MDI父窗体就不再需要Switch语句:

if (this.ActiveMdiChild is IChildSave) {
  ((IChildSave)this.ActiveMdiChild).SaveAction();
} else {
  MessageBox.Show("Child Form does not implement IChildSave.");
}

在这里,接口确实可以帮助您:

interface IChildSave {
  void SaveAction();
}
然后在每个子窗体中实现它:

public partial class Form1 : Form, IChildSave {

  public void SaveAction() {
    saveButton.PerformClick();
  }

  private void saveButton_Click(object sender, EventArgs e) {
    // save routine
  }
}
这样,MDI父窗体就不再需要Switch语句:

if (this.ActiveMdiChild is IChildSave) {
  ((IChildSave)this.ActiveMdiChild).SaveAction();
} else {
  MessageBox.Show("Child Form does not implement IChildSave.");
}

目前我做的一个开关和代码如下;目前我做的一个开关和代码如下;