我有一个简单的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会弹出两次。 为什么会这样?
答案 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;
}
}
}
}