简单地说他们的区别就是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. java堆和客栈_java中堆和栈的区别分析

    堆和栈是java数据结构里非常重要的概念,本文较为详细的分析了二者之间的区别.供大家参考.具体如下: Java的堆是一个运行时数据区,类的(对象从中分配空间.这些对象通过new.newarray.an ...

  2. mysql中char与varchar的区别分析

    原文网址:http://www.jb51.net/article/23575.htm mysql中char与varchar的区别分析 作者: 字体:[增加 减小] 类型:转载 在mysql教程中cha ...

  3. Java中equals()方法和==的区别分析

    Java中equals方法和==的区别分析 equals(Object obj)方法,将对象与传入的obj进行比较,相等返回true,否则返回false.equals方法和"==" ...

  4. C#中Write()和WriteLine()的区别分析

    Write()和WriteLine()都是System.Console提供的方法,两着主要用来将输出流由指定的输出装置(默认为屏幕)显示出来. 两着间的差异在 Console.WriteLine()方 ...

  5. fileoutputstream路径 android,Android编程中FileOutputStream与openFileOutput()的区别分析

    本文实例分析了Android编程中FileOutputStream与openFileOutput()的区别.分享给大家供大家参考,具体如下: openFileOutput() 首先给大家介绍使用文件如 ...

  6. java中的成员变量和局部变量的区别_java中成员变量与局部变量区别分析

    本文实例分析了java中成员变量与局部变量区别.分享给大家供大家参考.具体分析如下: 成员变量:在这个类里定义的私有变量,属于这个类. 创建以及使用成员变量 public class Person { ...

  7. mysql中char与varchar的区别分析(补充一句,int和integer没区别)

    转自:http://www.jb51.net/article/23575.htm 在mysql教程中char与varchar的区别呢,都是用来存储字符串的,只是他们的保存方式不一样罢了,char有固定 ...

  8. Java中Comparable和Comparator接口区别分析

    本文要来详细分析一下Java中Comparable和Comparator接口的区别,两者都有比较的功能,那么究竟有什么区别呢,感兴趣的Java开发者继续看下去吧. Comparable 简介 Comp ...

  9. java中堆与栈的区别_java中堆和栈的区别分析

    堆和栈是Java数据结构里非常重要的概念,本文较为详细的分析了二者之间的区别.供大家参考.具体如下: Java的堆是一个运行时数据区,类的(对象从中分配空间.这些对象通过new.newarray.an ...

最新文章

  1. 小程序商城选什么服务器,小程序商城到底用来干什么?
  2. [ios2]iOS 使用subversion管理iOS源代码 【转】
  3. C语言N台服务器通信,使用socket的Linux上的C语言文件传输顺序服务器和客户端示例程序 ....
  4. php 后台配置系统,使用 laravel-admin 配置后台管理系统
  5. list排序方法python_python将list排序的方法有哪些
  6. 福州java培训哪里好_南通java培训哪家好
  7. 顺序结构实现【数据结构】
  8. python3基础3--数据类型--数据运算--表达式if -else-while-for
  9. Web前端笔记-element ui中table中某列添加a便签进行跳转
  10. python将图片原比例缩小_Python实现图片长宽比例缩放和填充
  11. pytorch模型保存
  12. 20个开发人员非常有用的Java功能代码(二)
  13. verilog赋多位值_Verilog入门学习笔记——第一弹
  14. 第十七届全国大学生智能汽车竞赛智能视觉组全国一等奖(RT1064工程+openART识别代码)
  15. Arduino ESP32 通过定时器(Timer)功能唤醒深度睡眠
  16. word2vec及其优化
  17. Python语法错误和异常
  18. PicoZense TOF 深度摄像头技术参数 | AIRCamera,DCAM710,DCAM100
  19. [渝粤教育] 南通大学 电路分析 参考 资料
  20. 惠普一开机就自动修复_电脑开机提示自动修复怎么办?戳这里几招解决

热门文章

  1. onclick 调用php,AJAX调用PHP简单应用
  2. android 串口一直打开_实例 | 使用Python串口实时显示数据并绘图
  3. 标定板标定和九点标定的区别_标定系列一 | 机器人手眼标定的基础理论分析
  4. android截图canvas为空,html2canvas截图空白问题的解决
  5. 再论PID,PID其实很简单。。。
  6. java 复制文件_Java中复制文件的4种方法
  7. java 断点续传 开源_java断点续传原理
  8. 在java中关于枚举类型的特性_java枚举类型小结
  9. ps4修改服务器地区,ps4怎么修改服务器地址
  10. java中单例设计模式登记式单例类_java23种设计模式-创建型模式之单例模式