在 C# WinForms 中,`DialogResult` 用于模态对话框(通过 `ShowDialog()` 打开)关闭时向调用者返回状态。设置该属性会自动关闭窗体并释放资源,无需手动调用 `Close()`。
- 子窗体(对话框)设置返回值
在按钮点击事件或逻辑处理完成后,直接赋值给窗体的 `DialogResult` 属性。
```csharp
private void btnConfirm_Click(object sender, EventArgs e)
{
// 验证数据...
// 设置结果并自动关闭窗体
this.DialogResult = DialogResult.OK;
}
private void btnCancel_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.Cancel;
}
```
- 父窗体接收返回值
使用 `using` 语句确保对话框资源被正确释放,并通过 `ShowDialog()` 的返回值判断用户操作。
```csharp
using (var dialog = new MyDialogForm())
{
if (dialog.ShowDialog() == DialogResult.OK)
{
// 用户点击了"确定",获取数据
string resultData = dialog.SomePublicProperty;
}
else
{
// 用户点击了"取消"或直接关闭
}
}
```
- 注意事项
-
仅对模态窗体有效:如果窗体是通过 `Show()` 显示的,设置 `DialogResult` 不会关闭窗体,且调用者无法通过 `ShowDialog()` 接收返回值。
-
自动关闭机制:当窗体以 `ShowDialog()` 方式显示时,设置 `this.DialogResult` 为任意非 `None` 值会立即触发窗体关闭流程。
-
阻止自动关闭:若需在设置 `DialogResult` 前执行额外逻辑(如保存数据),可在 `FormClosing` 事件中检查 `DialogResult` 或通过 `e.Cancel = true` 拦截,但通常建议在按钮点击事件中先执行逻辑再设置 `DialogResult`。
4、点击右上角 X
C# 中直接关闭窗体(点击右上角 X)时,DialogResult 的值是 **DialogResult.Cancel** 。这是 Windows Forms 的默认行为:用 ShowDialog() 以模态方式显示的窗体,用户点击关闭按钮后,窗体被隐藏,DialogResult 自动设为 Cancel。
几点补充:
- 想自定义关闭行为的话,可以在
FormClosing事件里重写这个值,比如this.DialogResult = DialogResult.OK。 - 直接调用
this.Close()关闭模态窗体时,如果之前没显式设置过DialogResult,返回的也是Cancel。 - 通过代码设置
this.DialogResult = DialogResult.OK会自动关闭模态窗体 ,不需要再手动调Close()。