从MenuItem

时间:2017-06-17 11:16:50

标签: c# winforms formclosing

我有一个简单的WinForm应用程序,我已经为OnFormClosing定义了一个覆盖,以便能够请求退出确认并关闭sql连接。  它看起来像这样:

protected override void OnFormClosing(FormClosingEventArgs e)
    {
        switch (MessageBox.Show(this, "Really quit " + Application.ProductName + "?",
                     Application.ProductName, MessageBoxButtons.YesNo,
                     MessageBoxIcon.Exclamation))
        {
            case DialogResult.Yes:
                con.Close();
                Debug.WriteLine("Connection Closed");
                Debug.WriteLine("Exiting Application");
                Application.Exit();
                break;
            default:
                break;
        }
    }

不幸的是,当我关闭表单时,“真正退出”-dialog会弹出两次。 为什么会这样?

1 个答案:

答案 0 :(得分:2)

使用事件代替覆盖:

using System.Windows.Forms;

namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        public Form1 ()
        {
            InitializeComponent ();
        }

        private void Form1_FormClosing (object sender, FormClosingEventArgs e)
        {
            var result = MessageBox.Show ("My App", "Really quit?", MessageBoxButtons.YesNo);

            if (result == DialogResult.Yes)
            {
                // close connection
            }
            else
            {
                e.Cancel = true;
            }
        }
    }
}