如果我在我的WinForm中调用Close(),即使此时DialogResult为None,但在我调用Close()之后,我发现它被设置为Cancel。
这听起来正常吗?
或者更简单的方法是,在关闭窗体后立即设置DialogResult。例如,假设ValidateSettings将向用户显示表单中的任何问题或返回true:
或者更简单的方法是在Close之后立即设置DialogResult。例如,假设ValidateSettings将显示表单中的任何问题并向用户返回true: private void btnOK_Click(object sender, EventArgs e)
{
if (ValidateSettings())
{
SaveSettings();
Close();
DialogResult = DialogResult.OK;
}
}
这是完全正常的行为,这是预期的。但是,如果您正在使用一个 MDI 或 ShowDialog()
,它不等同于点击表单右上角的红色 "X"。
当一个窗体以模态对话框的形式显示时,点击关闭按钮(位于窗体右上角的带有 X 的按钮)会导致该窗体被隐藏,并将 DialogResult 属性设置为 DialogResult.Cancel。当用户点击对话框的关闭按钮或设置 DialogResult 属性的值时,Close 方法不会自动调用。相反,该窗体被隐藏,可以再次显示而不创建新的对话框实例。由于这种行为,当您的应用程序不再需要该窗体时,必须调用窗体的 Dispose 方法。
但是,DialogResult
值可以被覆盖:
您可以在窗体的 Closing 事件处理程序中设置 DialogResult 属性,从而覆盖用户单击关闭按钮时分配给 DialogResult 属性的值。
http://msdn.microsoft.com/zh-cn/library/system.windows.forms.form.dialogresult.aspx
Window.DialogResult
。 - Zéiksz