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

本文关键字:窗体 一个 方法 于每个 存在 识别 何识别 活动 | 更新日期: 2023-09-27 18:29:55

我有一个主(MDI)表单和大约70个子表单,这些表单已初始化并显示在运行时。一次可能会显示一个以上的子窗体。在子窗体中有名为"OK"的按钮及其事件"btnOk_click(object sender,EventArgs e)"。父窗体中有一个名为"保存"的按钮,如果我们单击它运行时,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

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

接口可以在这里真正帮助您:

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.");
}

有很多方法可以做到这一点。你的是其中之一(但很难用60个表格来完成!)。。

无论如何,你可以让每个孩子订阅当你按下保存时它引发的事件。