如何取消关闭winform?

时间:2017-12-13 08:10:50

标签: c# winforms

关闭表单时,会发生FormClosed事件,并且我想在FormClosed事件发生时进行一些工作,如:

this.FormClosed += (s, e) => {
    var result = MessageBox.Show("Exit Program?", "Exit?", MessageBoxButtons.YesNo, MessageBoxIcons.Question);
    if (result == DialogResult.No) {
        return;
    } else {
        // Do some work such as closing connection with sqlite3 DB
        Application.Exit();
    }
};

问题在于,无论我在消息框中选择是或否,程序都会关闭。如果我选择不,我需要中止程序退出,所以我该怎么做?

2 个答案:

答案 0 :(得分:7)

FormClosing(而不是FormClosed)事件的FormClosingEventArgs包含Cancel布尔值,您可以将其更改为true。请注意,即使您以编程方式关闭表单,也会发生这种情况。

this.FormClosing += (s, e) => {
    var result = MessageBox.Show("Exit Program?", "Exit?", MessageBoxButtons.YesNo, MessageBoxIcons.Question);
    if (result == DialogResult.No) {
        e.Cancel = true;
    } else {
        // Do some work such as closing connection with sqlite3 DB
        Application.Exit();
    }
};

要确定表单的关闭方式,它还包含CloseReason。 请参阅文档herehere

答案 1 :(得分:3)

您无法使用FormClosed事件,您需要使用FormClosing事件并将e.Cancel设置为true

原因是表单关闭后发生FormClosed事件,而表单关闭时发生FormClosing事件。

FormClosingEventArgs类包含一个名为Cancel的布尔属性,您可以将其设置为true以阻止表单关闭。