6

MDI 子フォームが閉じたときに MDI 親で検出し、それに応じて反応しようとしています。MDI の親は、MDI の子が閉じるまで何もしないでください。これが私のコードです。何が間違っているのかわかりませんが、追加したフォームクローズイベントメソッドが呼び出されることはありません...

次のコードは、MDI 親クラスにあります。

    private void keyValidation()
    {
        if (Properties.Settings.Default.Unlock == true)
            return;
        else
        {
            menu.Enabled = false;
            statusStrip.Enabled = false;

            ValidationForm vf = new ValidationForm();
            vf.MdiParent = this;
            vf.Show();
            vf.FormClosed += new FormClosedEventHandler(validationForm_FormClosed);
        }
    }

    void validationForm_FormClosed(object sender, FormClosedEventArgs e)
    {
        MessageBox.Show("Got here");
        if (Properties.Settings.Default.Unlock == true)
        {
            menu.Enabled = true;
            statusStrip.Enabled = true;
        }
    }

助けてくれてありがとう!

4

6 に答える 6

1

これはあなたが言及している問題に実際には対処していませんが、ユースケースから判断すると、検証フォームを MDI 子としてではなくモーダル ダイアログとして開くことを検討することをお勧めします。

これは、現在あるフォームのShowDialog()メソッドを使用して行うことができますShow()。他のフォームのボタンに割り当てるとShowDialog()、 も返される可能性があることに注意してください。DialogResult

于 2010-12-06T16:27:32.710 に答える
0

ひょっとしたら、隠れて閉じない CHILD フォームがあるかもしれません。VisibleChanged をフックしてみて、何が起こるか見てみましょう。

また、 FormClosing では閉じることをキャンセルできますが、 FormClosed ではそのオプションが提供されません。

于 2010-12-06T16:26:38.643 に答える
0

Closedイベントを使用しないでください。代わりに、次のFormClosingイベントを使用します。

private void frmMain_FormClosing(object sender, FormClosingEventArgs e){
  if (MessageBox.Show("Are you sure you want to Exit", "Confirmation", MessageBoxButtons.YesNo,MessageBoxIcon.Information) == System.Windows.Forms.DialogResult.No) {
    e.Cancel = true;
  }
}
于 2012-01-04T09:44:33.660 に答える