在C#中窗口的显示有两种方式:模态显示(showdialog)和非模态显示(show)。
二者最常见的区别是:

模态显示后,
弹出窗口阻止调用窗口的所有消息响应。
只有在弹出窗口结束后调用窗口才能继续。
在模态窗口“关闭”后,可以读取模态窗口中信息,包括窗口的返回状态,窗口子控件的值。

非模态显示后,
可以在弹出窗口和调用窗口之间随意切换。
调用窗口调用show方法后,下面的代码可以立即执行。
在非模态窗口关闭后,窗口的所有资源被释放,窗口不存在,无法获取窗口的任何信息。

MSDN上对showdialog的解释:

当窗体显示为模式对话框时,单击“关闭”按钮(窗体右上角带 X 的按钮)会隐藏窗体并将 DialogResult 属性设置为 DialogResult.Cancel。与无模式窗体不同,当用户单击对话框的关闭窗体按钮或设置 DialogResult 属性的值时,.NET Framework 不调用 Close 方法。窗体转而可以隐藏并可重新显示,而不用创建该对话框的新实例。因为未关闭显示为对话框的窗体,所以在您的应用程序不再需要该窗体时,必须调用该窗体的 Dispose 方法。

也就是说,非模态窗口在关闭时,会调用close方法,进而调用dispose方法,将窗口资源进行回收,所以窗口关闭后,不能在获取窗口信息。
模态窗口在关闭时,不会调用close方法,也不调用dispose方法,窗口仍然存在,占有资源,所以可以继续获得窗口相关信息,在窗口不再使用时,需要手动释放资源。

        Form2 testDialog = new Form2();if (testDialog.ShowDialog(this) == DialogResult.OK){this.txtResult.Text = testDialog.TextBox1.Text; // 窗口关闭后,还可以继续访问窗口的子控件值}else{this.txtResult.Text = "Cancelled";}// 关闭窗口// 其他操作............testDialog.ShowDialog(); // 模态窗口关闭后,可以再次显示出来testDialog.Dispose(); // 当模态窗口不再使用时,应该调用dispose方法释放资源Form2 test = new Form2();test.Show(); // 非模态显示// 关闭窗口// 其他操作............test.Show(); // 异常,因为在test关闭时,窗口已经被彻底销毁了,这里必须重新新建一个窗口,然后显示// 修改为如下test = new Form2(); // 创建一个新窗口,重新分配空间test.Show(); // 显示窗口

C# show和showdialog区别相关推荐

  1. winform show()和showdialog()区别(转载)

    原网址:https://blog.csdn.net/percy__lee/article/details/48554339 相关知识点 显示窗体可以有以下2种方法:   Form.ShowDialog ...

  2. Window.Show()和Window.ShowDialog()区别

    Window.Show():     打开窗口并返回,而不等待新打开的窗口关闭. Window.ShowDialog():   打开一个窗口,并且仅在新打开的窗口关闭后才返回. 转载于:https:/ ...

  3. winform form.show() 以及form.showdialog()区别 以及form.show()控件不显示解决办法

    非模态窗口 1. form.show() 执行此条语句后,下面的程序会立即执行,但是会出现控件不显示的问题,解决办法: 在后面加上form.Update()即可解决. 模态窗口 1.form.show ...

  4. show()与showdialog()区别

    这是个很弱的问题,但我还是要写一下: 显示有模式和无模式 Windows 窗体 窗体和对话框要么是有模式的,要么是无模式的."模式"窗体或对话框必须关闭或隐藏,然后您才能继续使用应 ...

  5. show() showdialog()区别

    Show():调用的窗体不会返回任何值(窗体显示为无模式窗体) 在使用.Show()显示form以后,会马上继续执行.Show()后面的语句. ShowDialog():调用的form会返回一个Dia ...

  6. C# 窗体应用 winform show 和showdialog区别

    同: 俩个都是显示界面 异: show 运行后,后面代码接着运行 showdialog 运行后,必须页面关闭在继续运行 showdialog代码 注意: 1.!!!如果要 打开form1,点击打开fo ...

  7. wpf 点击按钮弹出选择框_关于WPF的弹出窗口

    几个重要的概念需要清楚: Show和ShowDialog区别 1.调用Show方法后弹出子窗口后,线程会继续往下执行.调用ShowDialog方法弹出子窗口后,线程会阻塞,直到子窗口关闭才继续往下执行 ...

  8. WinForm二三事(一)消息循环

    在进入正文之前,想请大家先欣赏下面两段代码: 1: //这是一个控制台程序,请先添加System.Windows.Form.dll的引用 2: using System.Windows.Form; 3 ...

  9. C# 非模式窗体show()和模式窗体showdialog()的区别

    对话框不是模式就是无模式的.模式对话框,在可以继续操作应用程序的其他部分之前,必须被关闭(隐藏或卸载).例如,如果一个对话框,在可以切换到其它窗 体或对话框之前要求先单击"确定"或 ...

最新文章

  1. DOM模拟京东常用快捷键
  2. python的用途实例-python 星号(*)的多种用途
  3. UVa10970 - Big Chocolate(计数问题)
  4. 一个资深投行女销售和低调IT创业男的故事
  5. 如何修改git已提交记录的邮箱?
  6. 记录 之 在华为NPU上变更镜像
  7. 解决 fprintd-0.1-19.git04fd09cfa.el6 crash问题
  8. 脚本语言php是什么意思,php是什么脚本语言
  9. ldap java_使用LDAP保护Java EE6中的Web应用程序
  10. graph-easy使用简介
  11. 中国开放教育资源协会_教育中的开放数据开始显示出真正的吸引力
  12. [病毒分析]熊猫烧香(上)初始分析
  13. 腾讯终于良心了!桌面混乱有救了
  14. win10红警2黑屏_Windows10黑屏常见情况及解决办法
  15. 关于新手做ASO的一些方法和技巧
  16. 【JavaEE】电商秒杀项目·第2章·基础项目搭建
  17. php 随机字符串函数,PHP 生成随机字符串的方法函数
  18. 如何将谷歌浏览器的插件下载到本地?
  19. 正则表达式的语法规则
  20. C语言之——左旋字符串

热门文章

  1. java.Srping5
  2. “同频率聊天”——恋爱的葵花宝典
  3. 使用Adobe Premier把视频处理成片段
  4. ps 如何将视频转换成gif?
  5. Netty基本使用示例
  6. 1天100万件包裹,就是干!
  7. android dropbear 密码,Android移植之dropbear
  8. 北斗公网雨水情监测站“护航”水利数据安全
  9. 赢过大部分人,掏心窝的12条建议
  10. Git提交日志格式规约