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()。‌‌
相关推荐
爱喝热水的呀哈喽32 分钟前
HEJIAN RESEARCH
开发语言·matlab
白露与泡影39 分钟前
后端 Java 面试核心八股汇总|高频面试题 + 解析,覆盖基础到进阶
java·开发语言·面试
xifangge20251 小时前
基于 JavaScript 实现 CNC 数控切削参数与螺纹公差纯前端核算引擎
开发语言·前端·javascript
“AI国潮设计-小江”1 小时前
【AIGC实战】Python+SDXL批量生成「潮汕英歌舞冰淇淋蛋糕&红桃粿咖啡」IP,固定角色形象批量出甜品商业效果图
开发语言·人工智能·python·prompt·aigc
\光辉岁月/1 小时前
3.包装类
java·开发语言·包装类
波力海苔夹心脆6752 小时前
VisionMaster 两级位置修正实战:塑料外壳与金属件装配角度检测
经验分享·计算机视觉·c#·visionmaster·海康机器人·位置修正
FRing032 小时前
JavaScript入门到精通二十四(正则表达式、元字符、修饰符)
开发语言·前端·javascript·正则表达式
西索斯coding2 小时前
Grok 4.7 调用一直 401 怎么办?不是 Key 过期,是 Authorization 头格式问题——排查全流程 + 修复示例
服务器·开发语言·ai·php
SEO_juper3 小时前
hreflang 审计工具:外贸多语言站谷歌SEO的隐性杀手
开发语言·人工智能·爬虫·python·seo
WJ.Polar3 小时前
final、单例类、枚举类、抽象类、接口
java·开发语言