简单地说他们的区别就是show弹出来的窗体和父窗体(上一个窗体的简称)是属于同一等级的,这两个窗体可以同时存在而且可以随意切换,但是showdialog弹出来的窗体就不能这样,他永远是被置顶的,如果不关闭这个窗体,那就不能使用别的窗体。

所以说相对于show来说我感觉showdialog更多了一种强制性。所以这两种方法虽然都是弹出窗体,但是程序员需要根据需要来选择使用

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

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

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

MSDN上对showdialog的解释:

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

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

C# show和showdialog区别的更多相关文章

  1. window.open和window.showdialog区别

    open打开的窗口可以点击切换到其背后的父窗口,dialog的窗口无法点击切换到其背后的父窗口, 假如用window.opener或者parent等对象时,建议用open方法,不要用dialog,否则 ...

  2. 关于WPF的弹出窗口

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

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

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

  4. showdialog()与show的区别

    showdialog就是显示有模式的窗体,showdialog后面的语句不会执行,直到显示的窗体被关闭. show就是无模式的窗体,显示窗体后不论窗体是否关闭都执行show后面的语句. ------- ...

  5. 知道Form.Show()和Form.ShowDialog()的区别吗

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:知道Form.Show()和Form.ShowDialog()的区别吗.

  6. show()与showDialog()的区别

    A.WinForm中窗体显示  显示窗体可以有以下2种方法:  Form.ShowDialog方法 (窗体显示为模式窗体) Form.Show方法 (窗体显示为无模式窗体) 2者具体区别如下: 1.在 ...

  7. form.Show()和form.ShowDialog()的区别、新建一个form和MessageBox.Show()的常见用法

    一:form.Show()和form.ShowDialog()的区别 a. 任何窗体(派生于基类Form的类),都可以以两种方式进行显示. //非模式窗体From qform=new Form();q ...

  8. C#中方法Show.和ShowDialog的使用区别

    show()是非模式窗体. showDialog()是模式窗体. 如果这个时候用Show的话,则会发生的事情是,打开子窗体的同时主窗体又显示出来,而使用ShowDialog()的时候主要当子窗体关闭的 ...

  9. Windows窗体Winform----show()与showDialog()的区别

    show()与showDialog()的区别 最常见的显示一个新的窗体的方法有两种,下面直接上代码!! A.WinForm中窗体显示 显示窗体可以有以下2种方法:   Form.ShowDialog( ...

随机推荐

  1. Android开发之漫漫长途 XVII——动画(续)

    该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列.该系列引用了<Android开发艺术探索>以及<深入理解And ...

  2. 从零开始学 Web 之 移动Web(三)Zepto

    大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...

  3. CSS 基础:定位元素(3)<思维导图>

    这段时间利用一下间隙时间学习了CSS的基础知识,主要目的是加深对CSS的理解,虽然个人主要工作基本都是后台开发,但是个人觉得系统学习一下CSS的基础还是很有必要的.下面我学习CSS时做的思维导图(全屏 ...

  4. C语言第四讲,typedef 关键字,以及作用域

    C语言第四讲,typedef 关键字,以及作用域 一丶typedef关键字 在C语言中,有typedef 关键字,这个关键字的作用就是允许你为类型定义一个新的名字,也就是 起个别的名字 例如: typ ...

  5. 详解@EnableWebMvc

    最近看了<Spring in Action>的开头,就被Spring注解开发(完全不写web.xml)惊叹了,也第一次知道了@EnableWebMvc是SpringMVC的注解 @Enab ...

  6. sip 注册流程

    基本注册流程示意图: 注册流程描述如下: 1.         SIP代理向SIP服务器发送REGISTER请求: 2.         SIP服务器向SIP代理发送响应401,并在响应的消息头WWW ...

  7. C#基础知识汇总(不断更新中)

    ------------------------------目录---------------------------- 1.隐式类型2.匿名类型3.自动属性4.初始化器5.委托6.泛型7.泛型委托8 ...

  8. 解决默写浏览器中点击input输入框时,placeholder的值不消失的方法

    html中,placeholder作为input的一个属性,起到了在输入框中占位并提示的作用. 但是有一些浏览器,如chrome,当鼠标点击输入框时,placeholder的值不消失,只有输入数据才消 ...

  9. c#连接访问数据库(菜鸡篇)

    C#如何访问数据库(小白篇) 刚入坑不久学习的路上还是遇到了不小的问题,昨天学习C#的时候需要连接数据库获取数据. 网上有很多这样的文章,说实话对于我这样的小白还真是有点难理解,经过一番周折总算是了解 ...

  10. Starting zookeeper ... already running as process 1805错误

    启动zookeeper的时候,报Starting zookeeper ... already running as process 1805错误 上面这个错误意思为以作为进程1805运行.系统检测到你 ...