C#:模态对话框

在 C# WinForms 中,`DialogResult` 用于模态对话框(通过 `ShowDialog()` 打开)关闭时向调用者返回状态。设置该属性会自动关闭窗体并释放资源,无需手动调用 `Close()`。

  1. 子窗体(对话框)设置返回值

在按钮点击事件或逻辑处理完成后,直接赋值给窗体的 `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;

}

```

  1. 父窗体接收返回值

使用 `using` 语句确保对话框资源被正确释放,并通过 `ShowDialog()` 的返回值判断用户操作。

```csharp

using (var dialog = new MyDialogForm())

{

if (dialog.ShowDialog() == DialogResult.OK)

{

// 用户点击了"确定",获取数据

string resultData = dialog.SomePublicProperty;

}

else

{

// 用户点击了"取消"或直接关闭

}

}

```

  1. 注意事项
  • 仅对模态窗体有效:如果窗体是通过 `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()。‌‌
相关推荐
咕白m6251 小时前
C# 如何限制 PDF 复制、打印权限?
c#·.net
en.en..1 小时前
Linux wait()函数(预防僵尸进程)
java·大数据·开发语言
扬大平仔1 小时前
小深:用 AgentScope Java 2.0 Harness 做私人助手(上)
java·开发语言
yume_sibai1 小时前
正则表达式完全指南(基础语法 + 实战应用 + 性能优化 + 最佳实践)
开发语言·正则表达式·c#
AbandonForce1 小时前
简谈线程池
开发语言·c++·算法
李少兄1 小时前
JavaScript 运算符完全指南
java·开发语言·javascript
广州灵眸科技有限公司1 小时前
瑞芯微(EASY EAI)RV1126B display
开发语言·数据库·人工智能·科技·嵌入式硬件
Huangxy__2 小时前
java+ai 全栈项目
java·开发语言
Nil2082 小时前
leetcode 79单词搜索
开发语言·c#