C# 非模式窗体show()和模式窗体showdialog()的区别
对话框不是模式就是无模式的。模式对话框,在可以继续操作应用程序的其他部分之前,必须被关闭(隐藏或卸载)。例如,如果一个对话框,在可以切换到其它窗 体或对话框之前要求先单击“确定”或“取消”,则它就是模式的。
一、如何调用
任何窗体(派生于基类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()的区别的更多相关文章
- C# 非模式窗体show()和模式窗体showdialog()的区别(转)
对话框不是模式就是无模式的.模式对话框,在可以继续操作应用程序的其他部分之前,必须被关闭(隐藏或卸载).例如,如果一个对话框,在可以切换到其它窗 体或对话框之前要求先单击“确定”或“取消”,则它就是模 ...
- 五种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 ...
- STM32 HSE模式配(旁路模式、非旁路模式)
1.外部晶体/陶瓷谐振器(HSE晶体)模式 这种模式用得比较常见,HSE晶体可以为系统提供较为精确的时钟源.在时钟控制寄存器RCC_CR中的HSERDY位用来指示高速外部振荡器是否稳定.在启动时,直到 ...
- 设计模式(Java版)-创建型模式之简单工厂模式
前言:这段时间在学习设计模式,本人也是小菜一枚(所以写的如果有错误的地方请大大们给予指出).这个东西也是我一直想学习的,从点点滴滴做起,记录下自己每天的领悟! 一.工厂模式的动机 在软件系统中,经常面 ...
- Windows窗体Winform----show()与showDialog()的区别
show()与showDialog()的区别 最常见的显示一个新的窗体的方法有两种,下面直接上代码!! A.WinForm中窗体显示 显示窗体可以有以下2种方法: Form.ShowDialog( ...
- 七个结构模式之享元模式(Flyweight Pattern)
定义: 运用共享技术对大量细粒度对象的复用,这要求这些对象都很相似,状态变化很小.将这些对象的内部状态和外部状态进行区分,对于内部状态相同的只存储一个对象,而对不同的外部状态则采用不同的操作. 结构图 ...
- SQL Server数据库的三种恢复模式:简单恢复模式、完整恢复模式和大容量日志恢复模式(转载)
SQL Server数据库有三种恢复模式:简单恢复模式.完整恢复模式和大容量日志恢复模式: 1.Simple 简单恢复模式, Simple模式的旧称叫”Checkpoint with truncate ...
- Eclipse的下载、安装和WordCount的初步使用(本地模式和集群模式)
包括: Eclipse的下载 Eclipse的安装 Eclipse的使用 本地模式或集群模式 Scala IDE for Eclipse的下载.安装和WordCount的初步使用(本地模式和集群 ...
- IntelliJ IDEA的下载、安装和WordCount的初步使用(本地模式和集群模式)
包括: IntelliJ IDEA的下载 IntelliJ IDEA的安装 IntelliJ IDEA中的scala插件安装 用SBT方式来创建工程 或 选择Scala方式来创建工程 本地模式或集群 ...
随机推荐
- 20145226夏艺华 《Java程序设计》第5周学习总结
教材学习内容总结 第八章 异常处理 语法与继承架构 使用 try.catch Java中所有信息都会被打包为对象,如果愿意,可以尝试(try)捕捉(catch)代表错误的对象后做一些处理 try{ . ...
- 关于root
1.root优缺 android的root跟苹果越狱很类似,可以享受"解禁"后的很多自由. 1.删除系统中不需要的一些app,特别是一些厂商强制安装的app. 2.美化系统,例如修 ...
- 弹性盒模型justify-content属性
justify-content是应用于父容器上来规定子元素在水平方向上的对齐方式的. flex-start 左对齐 flex-end 右对齐 center 居中 space-betten 两端对齐,两 ...
- 网页中嵌入swf文件的几种方法
1. object + embed 传统的方法 优点:浏览器兼容性好,是 Macromedia 一直以来的官方方法缺点:a.embed 标签是不符合 W3C 的规范的,无法通过验证.当然, ...
- 【内核】linux内核启动流程详细分析【转】
转自:http://www.cnblogs.com/lcw/p/3337937.html Linux内核启动流程 arch/arm/kernel/head-armv.S 该文件是内核最先执行的一个文件 ...
- ADB常用命令(二)
参考 http://adbshell.com/commands 常用命令 查看adb 版本 adb version 打印所有附加模拟器/设备的列表 adb devices 设备序列号 adb get ...
- hive数据倾斜问题
卧槽草草 来源于其它博客: 貌似我只知道group by key带来的倾斜 hive在跑数据时经常会出现数据倾斜的情况,使的作业经常reduce完成在99%后一直卡住,最后的1%花了几个小时都没跑完, ...
- Codeforces 931D Peculiar apple-tree(dfs+思维)
题目链接:http://codeforces.com/contest/931/problem/D 题目大意:给你一颗树,每个节点都会长苹果,然后每一秒钟,苹果往下滚一个.两个两个会抵消苹果.问最后在根 ...
- CentOS7的firewall和安装iptables
前言:CentOS7 的防火墙默认使用是firewall,而我们通常使用iptables: 本文记录了firewall基础的命令和iptables的安装和使用. firewall部分: part1 : ...
- InterSystems Ensemble学习笔记(一) Ensemble介绍及安装
系列目录 InterSystems Ensemble学习笔记(一) Ensemble介绍及安装InterSystems Ensemble学习笔记(二) Ensemble创建镜像, 实现自动故障转移 一 ...