1

我有一个主(MDI)表单和大约 70 个子表单,它们在运行时初始化并显示。一次可能会显示超过 1 个子窗体。在每个子窗体中都有一个名为“OK”的按钮及其事件“btnOk_click(object 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;

谢谢约瑟夫·J

4

2 回答 2

8

接口在这里真的可以帮助你:

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 Parent 表单将不再需要 Switch 语句:

if (this.ActiveMdiChild is IChildSave) {
  ((IChildSave)this.ActiveMdiChild).SaveAction();
} else {
  MessageBox.Show("Child Form does not implement IChildSave.");
}
于 2012-04-04T13:33:04.400 回答
0

有很多方法可以做到这一点。你的就是其中之一(但很难用 60 种表格来跟上!)..

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

于 2012-04-04T13:17:17.153 回答