2

メニュー フォームを閉じるときにアプリケーションを閉じようとしています。これは私のコードです:

private void frmMenu_FormClosing(object sender, FormClosingEventArgs e)
{
    var result = MessageBox.Show("Do you want to close this application",
        "Alert", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
    if (result == DialogResult.Yes)
    {
        //this.Close();
        Application.Exit();
        //e.Cancel = false;
    }
    else
    {
        e.Cancel = true;
    }
}

このメッセージを閉じると、2 回表示されます。

4

4 に答える 4

4

exit を再度実行する必要はありません。そのまま通過させてください。

private void frmMenu_FormClosing(object sender, FormClosingEventArgs e)
{
    var result = MessageBox.Show("Do you want to close this application?",
        "Alert", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
    if (result == DialogResult.No)
    {
        e.Cancel = true;
    }
}
于 2012-10-31T10:47:37.823 に答える
2

OnFormClosingメソッドをオーバーライドできます。

protected override void OnFormClosing(FormClosingEventArgs e) {
        base.OnFormClosing(e);
        if (!e.Cancel) {
            if (MessageBox.Show("Do you want to close this application?", "Close Application", MessageBoxButtons.YesNo) != DialogResult.Yes) {
                e.Cancel = true;
            }
        }
    }

または、クラスでbool (例: ) を使用することに関するコメントのHans Passantのアドバイスに従います。IsDataValid

private void frmMenu_FormClosing(object sender, FormClosingEventArgs e)
{ 
   if (!IsDataValid)
   {
       if(DialogResult.Yes == MessageBox.Show(Do you want to close this application?",
        "Alert", MessageBoxButtons.YesNo, MessageBoxIcon.Question))
           this.Dispose(); //or Application.Exit();
       else
            e.Cancel = true;
   }
   else
       this.Dispose(); //or Application.Exit();
}
于 2012-10-31T11:09:33.753 に答える
1

Application.Exit();が閉じているため、2 つのメッセージが表示されfrmMenuますが、現在閉じている =>frmMenuは 2 回閉じられています。

frmMenuがアプリケーションのメイン フォームである場合は、 Program.csファイルに次のようなものを含める必要があります。

static class Program {
    [STAThread]
    static void Main() {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new FrmMenu());
    }
}

... を閉じると、アプリケーションは終了しますfrmMenuderapeが言ったように、電話する必要はありませんApplication.Exit()

于 2012-10-31T10:57:29.640 に答える
0
    private void frmMenu_FormClosing(object sender, FormClosingEventArgs e)
    {
        if (MessageBox.Show("Do you want to close this application", "Alert", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.No)
        {
            e.Cancel = true;
        }

    }
于 2014-06-27T11:18:42.083 に答える