即使在删除Close()后WinForm也会关闭

时间:2014-06-13 22:01:07

标签: c# winforms visual-studio-2010 visual-studio-debugging

我在VS 2010中遇到了来自我的WinForms应用程序的奇怪行为。我使用直接代码启动了一个新表单:

MainDisplayForm.cs:

using (MyForm myForm = new MyForm())
{
    var result = myForm.ShowDialog();
    if (result == DialogResult.OK)
    {
        // do stuff
    }
}

我向MyForm添加了一个“取消”按钮,向用户显示了一个确认MessageBox,然后调用了this.Close()。我后来删除了 this.Close()行,因为我添加了一个专用的关闭按钮。但是,每当我按下取消时,MyForm的实例仍会关闭!

MyForm.cs:

private void cmdCancel_Click(object sender, EventArgs e)
{
    DialogResult result = MessageBox.Show( ... )
    // clear the form if user really wants to quit

    // this.Close()
    // even after removing the above line, program still jumps to FormClosing
}

单击“取消”按钮后逐行调试时,程序流在MyForm_FormClosing结束后跳转到cmdCancel_Click。我创建了一个新按钮,并将其点击事件设置为cmdCancel_Click并且没有关闭表单 - 所以问题是已解决,但我仍然想知道这是否只是一个错误,或者别的什么?我还确保将“取消”按钮的DialogResult属性重置为None(在我引入专用“关闭”按钮之后将其更改为Cancel)。

1 个答案:

答案 0 :(得分:1)

当退出'using'语句的范围时,它调用'myForm.Dispose()'(这就是'使用'的全部要点 - 确保调用Dispose())。这反过来会破坏'myForm'实例,包括关闭窗口。