如果我在WinForm中调用Close(),似乎即使DialogResult当时为None,在我调用Close()之后,我看到它被设置为Cancel.
这听起来不正常吗?
Joh*_*ood 31
或者更简单,您可以在关闭后设置DialogResult.例如,假设ValidateSettings将向用户显示表单的任何问题,否则返回true:
private void btnOK_Click(object sender, EventArgs e)
{
if (ValidateSettings())
{
SaveSettings();
Close();
DialogResult = DialogResult.OK;
}
}
Run Code Online (Sandbox Code Playgroud)
Eva*_*ski 24
这是完全正常的,因为它是预期的行为.但是,如果您使用的是MDI,则不等同于单击表单右上角的红色"X" ShowDialog().
当窗体显示为模式对话框时,单击"关闭"按钮(窗体右上角带有X的按钮)会导致隐藏窗体并将DialogResult属性设置为DialogResult.Cancel.当用户单击对话框的"关闭"按钮或设置DialogResult属性的值时,不会自动调用Close方法.相反,表单是隐藏的,可以再次显示,而无需创建对话框的新实例.由于此行为,您必须在应用程序不再需要表单时调用表单的Dispose方法.
但是DialogResult可以覆盖该值:
通过在窗体的Closing事件的事件处理程序中设置DialogResult属性,可以在用户单击"关闭"按钮时覆盖分配给DialogResult属性的值.
http://msdn.microsoft.com/en-us/library/system.windows.forms.form.dialogresult(v=VS.100).aspx