1

Windows フォームを使用してアプリケーションを開発しています。プロジェクトには 3 つのフォームが含まれています。メイン フォームである 1 つのログイン フォームと、ログイン フォームの子フォームである 2 つの他のフォームです。

私の問題はApplication.Exit()、フォームを閉じるイベントでダイアログを複数回表示するメッセージボックスを使用して、アプリケーション全体を閉じたい場合です。

1.ログインフォーム、つまりメインフォームのこのコード:

private void FrmLogIn_FormClosing(object sender, FormClosingEventArgs e)
    {
        DialogResult loginResult = MessageBox.Show("Do you want to close this application?","Close",MessageBoxButtons.YesNo,MessageBoxIcon.Warning);
        if (loginResult == DialogResult.Yes)
        {
            Application.Exit();
        }
    }

2. ログイン フォームの子フォームである AdminForm の終了イベント:

 private void FrmAdmin_FormClosing(object sender, FormClosingEventArgs e)
    {
        DialogResult loginResult = MessageBox.Show("Do you want to close this application?","Close",MessageBoxButtons.YesNo,MessageBoxIcon.Warning);
        if (loginResult == DialogResult.Yes)
        {
            Application.Exit();
        }
    }

3. ログイン フォームの子フォームである Billoperations フォーム クローズ イベント:

private void FrmBillOperation_FormClosing(object sender, FormClosingEventArgs e)
{
    DialogResult loginResult = MessageBox.Show("Do you want to close this application?","Close",MessageBoxButtons.YesNo,MessageBoxIcon.Warning);
    if (loginResult == DialogResult.Yes)
    {
        Application.Exit();
    }
}

どのフォームでも閉じるボタンをクリックすると、MessageBox メッセージが 1 回だけ表示されます。私を助けてください。

4

4 に答える 4

1

すべての FormClosing メソッドが、ApplicationShutdownこれを中央で処理する関数を呼び出すようにします。作成するすべての新しいフォームにこのコードをコピーする必要はありません。

このメソッドでは、たとえばIsShuttingDown. すでに true の場合は、メソッドを終了します。そうでない場合は、質問をして終了を開始します。

于 2012-10-10T13:49:24.640 に答える
1

イベントにFormClosingEventArgs渡されたインスタンスには、Application クラスの Exit メソッドが呼び出されたときに設定されるCloseReasonプロパティがあります。ハンドラーはこの条件をチェックし、そうである場合はそれ以上のアクションを実行しません。FormClosingCloseReason.ApplicationExit

private void FrmLogIn_FormClosing(object sender, FormClosingEventArgs e)
{
    if (e.CloseReason == CloseReason.ApplicationExit)
        return;

   ...
}
于 2012-10-10T14:18:15.167 に答える
0

このコードで試すことができます

FormCollection fc = Application.OpenForms;
if (fc!= null && fc.Count > 0)
{
   for (int i = 1; i < fc.Count; i++)
    {
       if (fc!= null && fc.IsDisposed!= true)
        {
          fc.Dispose();
        }
   }
}
于 2012-10-10T13:52:24.153 に答える