0

StackOverflowにも同様の問題の例があることは知っていますが、問題の性質を理解するのが難しいため、カスタムケースを解決するのが困難です。

私が今持っているのはこのコードです:

bool closingPending = false;
private void MyFormN_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (closingPending) return;
            //DialogResult answer = MessageBox.Show("Do you want to save changes ?", "Save",
            if (MessageBox.Show("Do you want to save changes ?", "Save",
                                   MessageBoxButtons.YesNoCancel,
                                   MessageBoxIcon.Information,
                                   MessageBoxDefaultButton.Button3) == DialogResult.Yes)
            {
                closingPending = true;
                MessageBox.Show("To Do - validate and save");
            }
            if (MessageBox.Show("Do you want to save changes ?", "Save",
                                   MessageBoxButtons.YesNoCancel,
                                   MessageBoxIcon.Information,
                                   MessageBoxDefaultButton.Button3) == DialogResult.Cancel)
            {
                closingPending = true;
                e.Cancel = true;
            }
            if (MessageBox.Show("Do you want to save changes ?", "Save",
                                   MessageBoxButtons.YesNoCancel,
                                   MessageBoxIcon.Information,
                                   MessageBoxDefaultButton.Button3) == DialogResult.No)
            {
                closingPending = true;
                 Application.Exit();
            }
        }

これは、私の試みと、ここの他の投稿から得たいくつかのアイデアの結果です。しかし、このコードを実行するとどうなりますか?[x]ウィンドウのを押すとメッセージボックスが表示されますが、どのボタンをクリックしてもフォームが数回表示されます。追加する前にclosingPending、この問題は私が試しているときにのみ発生したと確信していApplication.Exit()ます。このclosingPending例を試してみると、例は機能しました。

if(closingPending) return;
if (MessageBox.Show("This application is closing down because of " + e.CloseReason.ToString() + ". Do you really want to close it ?", "", MessageBoxButtons.YesNo) == DialogResult.No)
    {                
        e.Cancel = true;
    }
    else
    {
        closingPending = true;
        Application.Exit();
    }

しかし、何が問題を引き起こしているのかについてはある程度の考えがありましたが、それを完全に理解したり解決したりすることにはまだほど遠いです。

4

1 に答える 1

2

以下のようなものを試してください...それはあなたの問題を解決します....

DialogResult result = MessageBox.Show("Do you want to save changes ?", "Save",
                                   MessageBoxButtons.YesNoCancel,
                                   MessageBoxIcon.Information,
                                   MessageBoxDefaultButton.Button3);

            switch (result)
            {

                case DialogResult.Yes: 
                    closingPending = true;
                    MessageBox.Show("To Do - validate and save");
                    break;

                case DialogResult.No: 
                    closingPending = true;
                    Application.Exit();
                    break;

                case DialogResult.Cancel:
                    closingPending = true;
                    e.Cancel = true;
                    break;
            }
于 2013-01-28T15:54:24.653 に答える