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()。‌‌
相关推荐
TOOLS指南6 分钟前
Chatshare 域名乱象:如何辨别仿冒站点,避坑指南
开发语言·信息可视化
茉莉玫瑰花茶14 分钟前
GO [ 函数 ]
开发语言·后端·golang
2601_9669496515 分钟前
每日自动更新股票行情:如何设计可靠的数据任务,避免重复写入和脏数据
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
ZealSinger22 分钟前
Go1.25容器感知GOMAXPROCS避限流
java·开发语言
茉莉玫瑰花茶36 分钟前
GO [ 类型 ]
开发语言·数据库·golang
梅雅达编程笔记41 分钟前
02_BeautifulSoup网页数据提取
开发语言·爬虫·python·beautifulsoup·数据采集
Escalating_xu1 小时前
【C 语言】深入理解指针(3):字符指针、数组指针、二维数组传参、函数指针与转移表
java·c语言·开发语言
可涵不会debug1 小时前
C++ std::bind 实战教程:线程池、回调场景全覆盖
linux·开发语言·c++
不正经的码狗1 小时前
Java 开发环境搭建与 Eclipse 使用速通教程
java·开发语言·eclipse
阿钱真强道1 小时前
24 嵌入式操作系统 | 项目启动与环境准备(PyQt5 / Flask 两个“最小可跑“)
开发语言·qt·flask·架构设计·协议契约