如何防止窗体关闭并显示确认对话框?

4

我希望当用户关闭窗口时,会出现一个消息框询问用户是否确定要关闭窗口。但是当我尝试时,窗口只是关闭了,从未显示消息框。

private void SchetsWin_FormClosing(object sender, FormClosingEventArgs e)
{
    if (e.CloseReason == CloseReason.UserClosing)
    {
        e.Cancel = true;
        MessageBox.Show("Example");
    }
}

6
这个事件和表单有关吗?无论是通过设计器还是代码实现,都必须加上SchetsWin.FormClosing += SchetsWin_FormClosing; - DonBoitnott
6
你能调试一下 e.CloseReason 吗?也许它不是你预期的那种错误。 - Harry
2个回答

9

不要为表单本身连接一个事件,只需覆盖OnFormClosing方法。至于显示确认消息以进行确认,请检查MessageBox的DialogResult值:

protected override void OnFormClosing(FormClosingEventArgs e) {
  if (e.CloseReason == CloseReason.UserClosing) {        
    if (MessageBox.Show("Do you want to close?", 
                        "Confirm", 
                        MessageBoxButtons.YesNo,
                        MessageBoxIcon.Question) == DialogResult.No) {
      e.Cancel = true;
    }
  }
  base.OnFormClosing(e);
}

但是要小心使用这样的功能 — 它有可能会让最终用户感到烦恼。


0

protected override void OnFormClosing(FormClosingEventArgs e)

        {
       if (MessageBox.Show("Are you sure you want to Close?","Confirm",MessageBoxButtons.YesNo,MessageBoxIcon.Question) == DialogResult.No)
            {
                e.Cancel = true;
            }
        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接