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