我有一个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应该关闭,但应用程序应保持打开状态。然而,它关闭!!
我该如何避免这种情况?
BTW:我使用的是Visual Studio 2010和Winforms。
答案 0 :(得分:4)
使用表单中的 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;
}
}
答案 1 :(得分: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
。你是?那太晚了。
答案 2 :(得分: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;
}
});
答案 3 :(得分:0)
参考木渎的回答。
除非您为MessageBox.Show()
指定其他参数,否则您无法从默认DialogResult.Ok
获取MessageBox
以外的任何结果。
您发布的代码(减去dialog = dialog =
的小错字)与我预期完全一样。
另外:Application.Exit()
IS 关闭应用程序的正确方法:)