父窗口与子窗口的层次关系

原文:父窗口与子窗口的层次关系

  父窗口与子窗口的层次关系

周银辉

关于子窗体的层级关系总结一下哈,希望能对大家有些帮助

假设有这样两个窗体:RootWindow,SubWindow,在RootWindow中引发某事件而显示SubWindow

1,如果弹出窗体(比如SubWindow)仅仅是调用Show方法,并且没有设置其Owner属性:

ClassRootWindow

{

void Foo()

{

SubWindow sw = newSubWindow();

sw.Show();

}

}

那么弹出窗体(SubWindow)和源窗体(如RootWindow)没有任何层级关系,也就是说不会以模态方式呈现(SubWindow不会阻挡用户对RootWindow的操作)。SubWindow在Show出来时在RootWindow的上方,但用户可以通过鼠标点击等方式将RootWindow带到SubWindow前方来而遮盖RootWindow的内容,也就是说,享有用户焦点的窗口将被带到最前方。并且RootWindow和SubWindow的最小化与还原操作互不影响。

2,如果弹出窗体(比如SubWindow)调用Show方法,并且设置了其Owner属性:

ClassRootWindow

{

void Foo()

{

SubWindow sw = newSubWindow();

sw.Owner = this;

sw.Show();

}

}

那么弹出窗体(SubWindow)和源窗体(如RootWindow)将有着父子关系,也就是说,弹出窗体将永远在源窗体的上方,但并不是模式的,用户可以操作源窗体,当源窗体被最小化或还原的时候,弹出窗体也将随着最小化和还原,反之不成立。

3,如果弹出窗体(SubWindow)以ShowDialog的方式显示,并且没有设置其Owner属性:

ClassRootWindow

{

voidFoo()

{

SubWindow sw = new SubWindow();

sw.ShowDialog();

}

}

弹出窗体将以模式的方式出现,但没有父子关系,弹出窗体将阻止用户对源窗体的操作,但点击源窗体时弹出窗体不会出现闪动效果。弹出窗体最小化时,源窗体会随之最小化,但还原操作却不可以(很奇怪)。这里有一个值得注意的问题是:在此模式下,如果弹出窗体不在任务栏显示(ShowInTaskBar==false),而源窗体显示在任务栏,用户的操作可能会导致弹出窗口被隐藏在源窗口背后而没办法切换出来(除非使用Alt+TAB)。

4,如果弹出窗体(SubWindow)以ShowDialog的方式显示,并且设置了其Owner属性:

Class RootWindow

{

void Foo()

{

SubWindow sw = newSubWindow();

sw.Owner = this;

sw.ShowDialog();

}

弹出窗体将以模式的方式出现,并且有父子关系,弹出窗体将永远处于源窗体上方,弹出窗体将阻止用户对源窗体的操作,并且点击源窗体时弹出窗体会出现闪动效果。弹出窗体最小化或还原时,源窗体会随之最小化或还原

DEMO:DialogDemo.zip

原文地址:https://www.cnblogs.com/lonelyxmas/p/9047094.html

时间: 2024-10-12 14:11:13

父窗口与子窗口的层次关系的相关文章

js window.open() 父窗口与子窗口的互相调用

javascript 父窗口与子窗口的互相调用 <html> <head></head> <body> 主要实现父子关系的页面 window.opener 是window.open 打开的子页面调用父页面对象 a.html <title>主页面</title> <script type="text/javascript"> /** 为测试IFrame子窗口调用父窗口的全局变量而添加的测试变量 */ va

JavaScript(Iframe、window.open、window.showModalDialog)父窗口与子窗口之间的操作

一.Iframe 篇 公共部分 //父对象得到子窗口的值 //ObjectID是窗口标识,ContentID是元素ID function GetValue(ObjectID,ContentID) { var IsIE = (navigator.appName == 'Microsoft Internet Explorer') if(IsIE) {//如果是IE alert(document.frames(ObjectID).document.getElementById(ContentID).i

总结js(Iframe、window.open、window.showModalDialog)父窗口与子窗口之间的操作

http://hi.baidu.com/yashua839/blog/item/131fdb2fe547ef221f3089af.html一.Iframe 篇 //&&&&&&&&&&&&&&&&&&&&公共方法开始&&&&&&&&&&&&&&a

C#中父窗口和子窗口之间控件互操作实例

本文实例讲述了C#中父窗口和子窗口之间控件互操作的方法.分享给大家供大家参考.具体分析如下: 很多人都苦恼于如何在子窗体中操作主窗体上的控件,或者在主窗体中操作子窗体上的控件.相比较而言,后面稍微简单一些,只要在主窗体中创建子窗体的时候,保留所创建子窗体对象即可. 下面重点介绍前一种,目前常见的有两种方法,基本上大同小异: 第一种,在主窗体类中定义一个静态成员,来保存当前主窗体对象,例如: 代码如下: public static yourMainWindow pCurrentWin = null

C# 委托 父窗口与子窗口间传值

1)目标 父窗口与子窗口都有1个Button和1个Label. 目标1:单击父窗口的Button,子窗口的Label将显示父窗口传来的值. 目标2:单击子窗口的Button,父窗口的Label将显示子窗口传来的值. 2)父窗口代码 using System; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsApp5 { public delegate void ShowMessageS

c# 列举所有窗口和子窗口

private delegate bool WNDENUMPROC(IntPtr hWnd, int lParam); [DllImport("user32.dll", ExactSpelling = true)] private static extern bool EnumChildWindows(IntPtr hwndParent, WNDENUMPROC lpEnumFunc, int lParam); [DllImport("user32.dll")] p

父窗口控制子窗口弹出和关闭【JSdemo】

[功能说明] 利用window.open()方法实现点击父窗口任意区域控制子窗口打开的关闭的效果 [HTML代码说明] <div class="box" id="box">点击任何区域,子窗口打开</div> [CSS代码说明] /*设置box高度和页面高度一致*/ body{ margin: 0; } html,body{ height: 100%; } .box{ border: 1px solid black; height: 99%;

父窗口取子窗口的 js 数组

现在这个系统,用到了大量的选择器 和 自动完成,凭借我的三寸不烂之手, 将这些选择器 和 自动完成做到了最简化, 一路顺风顺水. 今天下午补充一个页面的选择器, 要取一个复杂的 json 对像,用来填充数据.这个 json 对象包含数组, 取出来后,要转变为本地页面(选择器的父页面)的某个"类"的实例. 我用这个方法来将 json 对象转换为某个"类"的对象: 1 _.automap = function (data, type, writeNotExistsPro

js 父窗口与子窗口交互

showModalDialog 父窗口 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 2 <html> 3 <head> 4 <title>a.html</title> 5 6 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3&q