c#中Show和Showdialog的区别分析

2023-05-16

简单地说他们的区别就是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.   
  3. if (testDialog.ShowDialog(this) == DialogResult.OK)  
  4. {  
  5.     this.txtResult.Text = testDialog.TextBox1.Text; // 窗口关闭后,还可以继续访问窗口的子控件值  
  6. }  
  7. else  
  8. {  
  9.     this.txtResult.Text = "Cancelled";  
  10. }  
  11.   
  12. // 关闭窗口  
  13. // 其他操作  
  14. ......  
  15. ......  
  16. testDialog.ShowDialog(); // 模态窗口关闭后,可以再次显示出来  
  17.   
  18. testDialog.Dispose(); // 当模态窗口不再使用时,应该调用dispose方法释放资源  
  19.   
  20.   
  21. Form2 test = new Form2();  
  22. test.Show(); // 非模态显示  
  23. // 关闭窗口  
  24. // 其他操作  
  25. ......  
  26. ......  
  27. test.Show(); // 异常,因为在test关闭时,窗口已经被彻底销毁了,这里必须重新新建一个窗口,然后显示  
  28. // 修改为如下  
  29. test = new Form2(); // 创建一个新窗口,重新分配空间  
  30. test.Show(); // 显示窗口  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c#中Show和Showdialog的区别分析 的相关文章

随机推荐

  • 正常配置文件实例模板

    lt xml version 61 34 1 0 34 encoding 61 34 utf 8 34 gt lt configuration gt lt configSections gt lt section name 61 34 Se
  • 多线程下调用ShowDialog时异常原因及解决办法

    提示在可以调用OLE之前 xff0c 必须将当前线程设置为单线程单元 xff08 STA xff09 模式 xff0c 请确保您的Main函数带有STAThreadAttribute 导入导出功能 xff0c 在调用ShowDialog时的
  • C#操作注册表增删改查及关机能保存问题

    为何用程序写入注册表后 xff0c 重启机器注册表项就彻底丢失呢 仔细看看RegCreateKeyEx的用法 其中的dwOptions使用 REG OPTION NON VOLATILE 而不是 REG OPTION VOLATILE 重启
  • vnc远程,在windows下如何实现vnc远程

    在平时的工作中 xff0c 因为工作性质 xff0c 所以经常会用到vnc远程 xff0c 那有小伙伴知道如何在win下面实现vnc远程吗 xff1f 哪款工具能较好的实现vnc远程呢 xff1f 别着急 xff0c 咱今天就来看一下如何在
  • 函数形参传递概念及问题分析

    普通函数参数 下面程序试图改变main函数中a和b的值 include lt stdio h gt void fun int x int y int c c 61 a a 61 b b 61 c int main int a 61 1 b
  • c语言中函数调用的原理及形参传递实质原理分析

    一 函数参数传递机制的基本理论 函数参数传递机制问题在本质上是调用函数 xff08 过程 xff09 和被调用函数 xff08 过程 xff09 在调用发生时进行通信的方法问题 基本的参数传递机制有两种 xff1a 值传递和引用传递 以下讨
  • c++中多线程传递参数原理分析

    线程可以共享进程的内存空间 xff0c 线程拥有自己独立内存 关于参数的传递 xff0c std thread的构造函数只会单纯的复制传入的变量 xff0c 特别需要注意的是传递引用时 xff0c 传入的是值的副本 xff0c 也就是说子线
  • 线程的局部变量ThreadLocal概念

    ThreadLocal是什么 对这个词语分解 xff0c 将其分为Thread和Local xff0c 顾名思义便是本线程的变量 xff0c 既然是当前线程的变量 xff0c 那么就意味着这个变量对于其他线程来说就是隔离的 xff0c 也就
  • C++多线程并发中线程管理

    一 何为并发 刚开始接触计算机编程语言时 xff0c 我们编写一个程序 xff0c 在main入口函数中调用其它的函数 xff0c 计算机按我们设定的调用逻辑来执行指令获得结果 如果我们想在程序中完成多个任务 xff0c 可以将每个任务实现
  • 多线程中堆和栈区别的深入解析

    很多现代操作系统中 xff0c 一个进程的 xff08 虚 xff09 地址空间大小为4G xff0c 分为系统空间和用户空间两部分 xff0c 系统空间为所有进程共享 xff0c 而用户空间是独立的 xff0c 一般WINDOWS进程的用
  • C语言中队列、堆栈、内存映射、多线程概念

    队列 xff1a 先近先出 xff1b 栈 xff1a 先近后出 xff1b 栈的大小是由编译器决定的 xff0c 默认大小是1M xff0c 可以更改 xff0c 但是一般不建议修改 xff0c 每个exe都有一个栈 xff0c 无法利用
  • C++多线程编程分析-线程间通信

    上文我们介绍了如何建立一个简单的多线程程序 xff0c 多线程之间不可避免的需要进行通信 相比于进程间通信来说 xff0c 线程间通信无疑是相对比较简单的 首先我们来看看最简单的方法 xff0c 那就是使用全局变量 xff08 静态变量也可
  • 多线程访问全局变量和局部变量剖析

    如果一个变量是成员变量 xff0c 那么多个线程对同一个对象的成员变量进行操作时 xff0c 它们对该成员变量是彼此影响的 xff0c 也就是说一个线程对成员变量的改变会影响到另一个线程 如果一个变量是局部变量 xff0c 那么每个线程都会
  • c语言中全局变量多线程调用-局部变量、静态局部变量、全局变量与静态全局变量分析

    基本概念 xff1a 作用域 xff1a 起作用的区域 xff0c 也就是可以工作的范围 代码块 xff1a 所谓代码块 xff0c 就是用 括起来的一段代码 数据段 xff1a 数据段存的是数 xff0c 像全局变量就是存在数据段的 代码
  • vnc viewer 绿色版,6款超好用的vnc viewer 绿色版

    市面上形形色色的vnc viewer 绿色版软件很多 在众多的vnc viewer 绿色版软件中 你会选择哪一款呢 你所了解的vnc viewer 绿色版又有哪些呢 接下来让我们一起看看有哪些好用的vnc viewer 绿色版软件吧 第一款
  • django 框架模型之models常用的Field,这些Field的参数、及常见错误原因及处理方案。

    1 django 模型models 常用字段 1 models AutoField 自增列 61 int 11 如果没有的话 xff0c 默认会生成一个名称为 id 的列 如果要显式的自定义一个自增列 xff0c 必须设置primary k
  • 干货丨ChatGPT大爆发以来,最值得收藏的30个AI工具,让你生产力爆表、效率无敌!

    随着ChatGPT的火爆出圈 xff0c 炸出来一堆 AI神器 xff0c 它们不仅大大拓宽了我们原本的能力范围 xff0c 更是让工作效率瞬间翻倍 接下来 xff0c 给大家推荐30个精选的 AI工具 xff0c 拿走 xff0c 直接用
  • 多线程下局部变量与全局变量的使用及区别

    局部变量是在栈中运行 每个运行的线程都有自己的堆栈 别的线程无法访问得到 xff0c 因此我们说 xff0c 局部变量是 安全 的 全局变量是在堆中运行 堆是对所有的线程都可见的 因此在两个以上的线程访问全局变量时 xff0c 就会出现所谓
  • MFC中Windows窗口消息循环及多线程之间关系

    Windows中一个进程可以包含多个线程 xff0c 由多个线程组成 在Windows应用程序中 xff0c 窗体是由 UI线程 xff08 User Interface Thread xff09 的特殊类型的线程创建的 一个UI线程包含一
  • c#中Show和Showdialog的区别分析

    简单地说他们的区别就是show弹出来的窗体和父窗体 xff08 上一个窗体的简称 xff09 是属于同一等级的 xff0c 这两个窗体可以同时存在而且可以随意切换 xff0c 但是showdialog弹出来的窗体就不能这样 xff0c 他永