我在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
)。
答案 0 :(得分:1)
当退出'using'语句的范围时,它调用'myForm.Dispose()'(这就是'使用'的全部要点 - 确保调用Dispose())。这反过来会破坏'myForm'实例,包括关闭窗口。