2

C#GUIアプリケーションがあります。ユーザーが赤い「X」(アプリを閉じるため)をクリックすると、メッセージを表示して、本当に閉じたいかどうかを尋ねます。

私は解決策を見つけました:

        DialogResult dialog = MessageBox.Show("Do you really want to close the program?", "SomeTitle", MessageBoxButtons.YesNo);
        if (dialog == DialogResult.Yes)
        {
            Application.Exit();
        }else if (dialog == DialogResult.No)
        {
          //don't do anything
        }

ユーザーが「はい」をクリックすると、アプリケーションは完全に終了するはずです。(Application.Exit()はこの目的に対して正しいですか?)

ユーザーが「いいえ」をクリックすると、DialogResult / MessageBoxは閉じますが、アプリケーションは開いたままになります。しかし、閉まります!!

どうすればこれを回避できますか?

ところで:私はVisualStudio2010とWinformsを使用しています。

4

4 に答える 4

5

フォームのFormClosingイベント、およびFormClosingEventArgsを使用して、プロセスをキャンセルします。

例:

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        DialogResult dialog = dialog = MessageBox.Show("Do you really want to close the program?", "SomeTitle", MessageBoxButtons.YesNo);
        if (dialog == DialogResult.No)
        {
            e.Cancel = true;
        }
    }
于 2012-05-08T19:14:51.507 に答える
2

プログラムウィンドウのフォームのFormClosingイベントを使用します。次に、ユーザーが「いいえ」をクリックe.Cancelした場合に設定できます。true

this.FormClosing += (s, e) => {
  DialogResult dialog = dialog = MessageBox.Show("Really close?", "SomeTitle",
    MessageBoxButtons.YesNo);
  if (dialog == DialogResult.No)
  {
    e.Cancel = true;
  }
};

を使用していると思いますFormClosed。あなたは?それでは手遅れです。

于 2012-05-08T19:13:12.177 に答える
0

Muduの回答を参照してください。

基本的に、追加のパラメータを指定しない限り、デフォルトMessageBox.Show()以外の結果を取得することはできません。DialogResult.OkMessageBox

あなたが投稿したコード(あなたの小さなタイプミスを除いたものdialog = dialog =)は、私が期待したとおりに機能します。

また:アプリケーションをApplication.Exit() 閉じる正しい方法です:)

于 2012-05-08T19:21:30.920 に答える
0

これを試して

        this.FormClosing += new FormClosingEventHandler(delegate(object sender, FormClosingEventArgs e)
        {
            if (MessageBox.Show("Do you really want to exit this application?", MessageBoxButtons:=MessageBoxButtons.YesNo) == DialogResult.No)
            {
                e.Cancel = true;
            }
        });
于 2012-05-08T19:14:44.277 に答える