对话框不是模式就是无模式的。模式对话框,在可以继续操作应用程序的其他部分之前,必须被关闭(隐藏或卸载)。例如,如果一个对话框,在可以切换到其它窗 体或对话框之前要求先单击“确定”或“取消”,则它就是模式的。
一、如何调用
任何窗体(派生于基类Form的类),都可以以两种方式进行显示。
//非模式窗体
From qform=new Form();
qform.Show();
//模式窗体
Form qform=new Form();
qform.ShowDialog();
一、控制权上的区别
Form.Show创建新窗体后(非模式),立即返回,且没有在当前活动窗体和新窗体间建立任何关系,即在保持新窗口的情况下关闭(或最小化)现有 窗体或在保留现有窗体情况下关闭(或最小化)新窗口,都是可以的。
Form.ShowDialog创建模式窗体,即只有当建立的新窗口关闭之后,原有窗体才能重新获得控制权。即如果不关闭新窗口,将无法对原活动窗 口进行任何操作。对新窗口进行的最小化、还原将会和原窗口一起进行,但是新窗口的关闭对原窗口没有影响。
需要注意的是,不管是何种情况,只要主窗体被关闭了,或主程序结束了,那么Application.Run将会关闭所有窗体,不管它是模式还是非模 式。
二、Owner属性带来了什么
上面所讲的是不建立拥有关系时的窗体。当为窗体间建立了拥有关系,情况就会有所变化。
1、首先看非模式的情况。为非模式新窗口建立拥有关系的方法是修改其Owner属性。(默认情况下,非模式窗口不存在拥有者)
form.Owner=this; //假设当前窗口是新窗口的拥有者
form.Show();
很显然,新建的非模式窗体已经被认为是原活动窗体的子窗体,原窗口的行为将会影响新窗口,所以我们姑且把它们称作父窗口和子窗口之间的关系。
那么,改动后会有什么显著的变化呢?主要有两点:
第一,父窗口最小化、还原或关闭,子窗口也将随之最小化、还原或关闭。(注意,在未添加拥有关系之前它们是互不相干的。)反过来,子窗口的最小化、 还原或关闭对父窗口不构成影响。
第二、在任务栏上,只显示父窗体的图标而不显示子窗体的图标。(在父子关系诞生之前,各窗体在任务栏上有各自图标。)
2、
模式窗体的情况下。用ShowDialog方法显示新窗体时,当前窗体被认为是新窗体的逻辑拥有者。所谓逻辑拥有者,是指默认情况下,用
ShowDialog而明确指定拥有者的话,Owner值为null。但无论Owner属性设置与否,与用户的交互行为都是一样的。
设置Owner属性的方法除了同上述Show情况下的那种之外,还有一种,即当作ShowDialog的参数传递。如:
form.ShowDialog(this); //当前窗体为新窗体的拥有者。

就是说,如果你指定了第三个窗体为新模式窗口的Owner,的确,新窗口和原窗口可能断绝了关系,而是作为第三个窗口的子窗口的身份出现。但是事
实上,它们间的这种父子关系的建立并没有在行为上给我们带来跟多惊喜。比如,新窗口关闭前,父窗口还是不能获得控制权等等,一切行为都没有变。
三、总结与说明
1、Show方法创建的窗体在行为上具有不确定性,Owner属性对此责任重大。
2、当前活动窗口和用ShowDialog创建的模式窗口之间有着与生俱来的关系,这一关系的承载者是可以改变的,但是这一关系的建立或解除并不能 给窗体的行为带来任何变化。
3、一个窗体可以拥有一个可选的拥有者,同时可以成为多个窗体的拥有者。
4、这里所指的子窗体和父窗体并不是真正意义上的,而是为了加深理解而杜撰出来的不科学的称法。应与window窗体术语中的父窗体和子窗体区分 开,不可混淆。后者存在边缘裁剪。

C# 非模式窗体show()和模式窗体showdialog()的区别(转)的更多相关文章

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

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

  2. 五种I/O 模式——阻塞(默认IO模式),非阻塞(常用语管道),I/O多路复用(IO多路复用的应用场景),信号I/O,异步I/O

    五种I/O 模式——阻塞(默认IO模式),非阻塞(常用语管道),I/O多路复用(IO多路复用的应用场景),信号I/O,异步I/O 五种I/O 模式:[1]        阻塞 I/O          ...

  3. STM32 HSE模式配(旁路模式、非旁路模式)

    1.外部晶体/陶瓷谐振器(HSE晶体)模式 这种模式用得比较常见,HSE晶体可以为系统提供较为精确的时钟源.在时钟控制寄存器RCC_CR中的HSERDY位用来指示高速外部振荡器是否稳定.在启动时,直到 ...

  4. 设计模式(Java版)-创建型模式之简单工厂模式

    前言:这段时间在学习设计模式,本人也是小菜一枚(所以写的如果有错误的地方请大大们给予指出).这个东西也是我一直想学习的,从点点滴滴做起,记录下自己每天的领悟! 一.工厂模式的动机 在软件系统中,经常面 ...

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

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

  6. 七个结构模式之享元模式(Flyweight Pattern)

    定义: 运用共享技术对大量细粒度对象的复用,这要求这些对象都很相似,状态变化很小.将这些对象的内部状态和外部状态进行区分,对于内部状态相同的只存储一个对象,而对不同的外部状态则采用不同的操作. 结构图 ...

  7. SQL Server数据库的三种恢复模式:简单恢复模式、完整恢复模式和大容量日志恢复模式(转载)

    SQL Server数据库有三种恢复模式:简单恢复模式.完整恢复模式和大容量日志恢复模式: 1.Simple 简单恢复模式, Simple模式的旧称叫”Checkpoint with truncate ...

  8. Eclipse的下载、安装和WordCount的初步使用(本地模式和集群模式)

    包括:    Eclipse的下载 Eclipse的安装 Eclipse的使用 本地模式或集群模式 Scala IDE for Eclipse的下载.安装和WordCount的初步使用(本地模式和集群 ...

  9. IntelliJ IDEA的下载、安装和WordCount的初步使用(本地模式和集群模式)

    包括: IntelliJ IDEA的下载  IntelliJ IDEA的安装 IntelliJ IDEA中的scala插件安装 用SBT方式来创建工程 或 选择Scala方式来创建工程 本地模式或集群 ...

随机推荐

  1. Oracle优化-表设计

    前言 绝大多数的Oracle数据库性能问题都是由于数据库设计不合理造成的,只有少部分问题根植于Database Buffer.Share Pool.Redo Log Buffer等内存模块配置不合理, ...

  2. C# 令某个窗体可跟着鼠标移动

    /// <summary> /// 使窗口的中的指定控件支持运行时移动 /// TODO:运行时缩放 /// </summary> public class ControlMo ...

  3. [Linux][Hadoop] 将hadoop跑起来

    前面安装过程待补充,安装完成hadoop安装之后,开始执行相关命令,让hadoop跑起来   使用命令启动所有服务: hadoop@ubuntu:/usr/local/gz/hadoop-$ ./sb ...

  4. PAT A 1013. Battle Over Cities (25)【并查集】

    https://www.patest.cn/contests/pat-a-practise/1013 思路:并查集合并 #include<set> #include<map> ...

  5. APP设计师拿到APP产品原型开始,七步搞定APP设计(转)

    任何一款成功的APP都需要以坚实的产品概念作为基础,因为概念决定了产品最终完成的潜力. 一般情况下,交到app设计师手里的都是移动app产品原型图.当然这个是在移动产品经理反复斟酌,并且与大家开会讨论 ...

  6. java的几种对象(PO,VO,DAO,BO,POJO)解释

    java的几种对象(PO,VO,DAO,BO,POJO)解释     一.PO:persistant object 持久对象,可以看成是与数据库中的表相映射的java对象.最简单的PO就是对应数据库中 ...

  7. 快速幂 fast_exp

    long long fast_exp(int base,long long exp,int mod) { long long ans=1LL,a=base; ) { if(exp&1LL) a ...

  8. X-UA-Compatible属性的解释

    问题描述: 代码如下: <meta http-equiv="X-UA-Compatible" content="IE=9; IE=8; IE=7; IE=EDGE& ...

  9. css/js(工作中遇到的问题)

    移动设备点击时去掉外加的蓝色边框 a, input, button { -webkit-tap-highlight-color: rgba(0,0,0,0); -webkit-tap-highligh ...

  10. [工作中的设计模式]建造者模式builder

    一.模式解析 建造模式是将复杂的内部创建封装在内部,对于外部调用的人来说,只需要传入建造者和建造工具,对于内部是如何建造成成品的,调用者无需关心. 以上是对建造者模式的官方定义,简单说就是对于复杂对象 ...