1

メイン (MDI) フォームと、初期化されて実行時に表示される約 70 の子フォームがあります。一度に複数の子フォームを表示できます。それぞれの子フォームには、「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 親フォームに 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

これを行う方法はたくさんあります。あなたのものはそれらの 1 つです (しかし、60 のフォームを追跡するのは非常に困難です!)。

とにかく、保存を押したときに発生するイベントにすべての子をサブスクライブさせることができます。

于 2012-04-04T13:17:17.153 に答える