如何防止或阻止关闭WinForms窗口?

49 c# winforms

如何通过显示MessageBox?来阻止关闭窗口?(技术:WinFormsC#)

当close事件发生时,我想要运行以下代码:

private void addFile_FormClosing( object sender, FormClosingEventArgs e ) {
    var closeMsg = MessageBox.Show( "Do you really want to close?", "Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Question );

    if (closeMsg == DialogResult.Yes) {
        //close addFile form
    } else {
        //ignore closing event
    }
}
Run Code Online (Sandbox Code Playgroud)

Vic*_*tor 102

private void Form1_FormClosing(object sender, FormClosingEventArgs e) {
    var window = MessageBox.Show(
        "Close the window?", 
        "Are you sure?", 
        MessageBoxButtons.YesNo);

    e.Cancel = (window == DialogResult.No);
}
Run Code Online (Sandbox Code Playgroud)


Blu*_*ueM 27

捕获FormClosing事件并设置 e.Cancel = true

private void AdminFrame_FormClosing(object sender, FormClosingEventArgs e)
{
    var res = MessageBox.Show(this, "You really want to quit?", "Exit",
            MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2);
    if (res != DialogResult.Yes)
    {
      e.Cancel = true;
      return;
    }
}
Run Code Online (Sandbox Code Playgroud)


Err*_*Efe 6

在您的OnFormClosing活动中,您可以显示对话框,if答案为假(不显示),然后设置to 的Cancel属性.EventArgstrue


小智 5

一种特殊的做法是始终防止用户仅关闭表单:

private void Frm_FormClosing(object sender, FormClosingEventArgs e)
{
    e.Cancel = (e.CloseReason == CloseReason.UserClosing); 
    // disable user closing the form, but no one else
}
Run Code Online (Sandbox Code Playgroud)