0

赤い X ボタンをクリックして MDI 親フォームを閉じると、まず MDI 子フォームのすべての OnFormClosing メソッドが呼び出され、次に MDI 親フォームの OnFormClosing メソッドが呼び出されます。ただし、MDI 親の OnFormClosing メソッドではe.Cancel = true;、コードのどこかに書くことができます。その場合、MDI 子フォームの OnFormClosing メソッドを呼び出すべきではありません。

1-) MDI 親を閉じると、MDI 子フォームの OnFormClosing メソッドがトリガーされないようにする方法はありますか?

2-) 子フォームを閉じるたびにこのメソッドが呼び出され、親フォームを閉じるときに呼び出されないように、MDI 子のメソッドはありますか?

4

2 に答える 2

2

下位レベルのメソッドを使用してWndProc、フォームのWM_CLOSEイベントを処理できます。

protected override void WndProc(ref Message m)
{
    if (m.Msg == 0x10) // WM_CLOSE
    {
        // Process the form closing. Call the base method if required,
        // and return from the function if not.
        // For example:
        var ret = MessageBox.Show("Do you really want to exit?", "Exit", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
        if (ret == System.Windows.Forms.DialogResult.No)
            return;
    }
    base.WndProc(ref m);
}

このコードを MDI 親フォームに挿入します。FormClosing子フォームのイベントの前に発生します。

于 2013-02-13T09:09:59.740 に答える
0

ここで述べたように、あなたはそれを制御できないと思います

FormClosing イベント

フォームがマルチ ドキュメント インターフェイス (MDI) 親フォームの場合、MDI 親フォームの FormClosing イベントが発生する前に、すべての MDI 子フォームの FormClosing イベントが発生します。同様に、すべての MDI 子フォームの FormClosed イベントは、MDI 親フォームの FormClosed イベントが発生する前に発生します。MDI 子フォームの FormClosing イベントをキャンセルしても、MDI 親フォームの FormClosing イベントの発生は妨げられません。ただし、イベントをキャンセルすると、親フォームにパラメーターとして渡される FormClosingEventArgs クラスの Cancel プロパティが true に設定されます。すべての MDI 親フォームと子フォームを強制的に閉じるには、MDI 親フォームで Cancel プロパティを false に設定します。

于 2013-02-13T09:03:37.330 に答える