父窗口与子窗口的层次关系2012-02-11 博客园 周银辉假设有这样两个窗体:RootWindow,SubWindow,在RootWindow中引发某事件而显示SubWindow1,如果弹出窗体(比如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)将有着父子关系,也就是说,弹出窗体将永远在源窗体的上方,但并不是模式的,用户可以操作源窗体,当源窗体被最小化或还原的时候,弹出窗体也将随着最小化和还原,反之不成立。