任何人都可以告诉我如何区分它们吗?顶层窗口,子窗口,对话框(模态)窗口和非对话框(无模式)窗口之间有什么区别?
我很难理解顶级子窗口与对话框/非对话窗口有什么区别因素? 顶层窗口可以是对话/非对话窗口吗? 子窗口可以是对话框/非对话窗口吗?
任何人都可以告诉我如何区分它们吗?顶层窗口,子窗口,对话框(模态)窗口和非对话框(无模式)窗口之间有什么区别?
我很难理解顶级子窗口与对话框/非对话窗口有什么区别因素? 顶层窗口可以是对话/非对话窗口吗? 子窗口可以是对话框/非对话窗口吗?
顶级表单属于桌面,而子表单属于另一种表单;这意味着关闭或最小化拥有表单也会影响子表单。
模态窗体/对话框会阻止调用线程,直到窗体关闭,而非模态窗体允许您在显示时与应用程序中的其他窗体进行交互。任何形式都可以是模态/无模式的,无论它是顶级还是子级形式 - 但是模态对话的默认行为将归属于导致它们显示的形式。
从MSDN:
莫代尔
模式窗体或对话框必须关闭或隐藏,然后才能继续使用该应用程序的其他部分的工作。
无模式
模式窗体让你转移的形式,并且另一种形式之间的焦点,而不必关闭初始形式。
顶层窗口可以是模态(对话)或无模式。
顶级窗口属于桌面,因此它不能是父窗体的子项。
父窗体拥有的子窗口,不是的顶级窗体,因为它具有父窗体。但它可以位于顶部,Z顺序为,根据其显示方式可以是模式或无模式,分别为ShowDiaglog()
或Show()
。
顶层窗口:不属于任何其他窗口的窗口,因此它们管理自己的一生。示例记事本窗口
子窗口:其他窗口拥有的窗口。其他窗口本身可以是顶层或者子层。示例编辑记事本的框或状态栏,因此如果关闭记事本窗口编辑框,状态栏等窗口不见了。
模式窗口:阻止当前线程执行直到活动的窗口。如果它是一个子窗口,那么与其父窗口的任何交互都将被阻止。记事本的字体对话框示例如果您打开字体窗口,则无法在记事本窗口上键入任何内容。
无模式窗口:当它处于活动状态时不会阻止当前线程执行的窗口,所以如果它是子窗口,它允许您与其父窗口进行交互。示例查找记事本对话框,如果按Ctrl + F并打开查找窗口,则可以将其放在一边,然后继续在主记事本窗口上打字。
重要的一点,一个窗口可以是Child或者Top,但不能同时为两个。
希望这会有所帮助。
这是否意味着您可以拥有一个无模式的子窗口? –
@ZammyPage是的,这很常见;例如,在文本编辑器中,查找功能可能是一个无模式子窗口,允许您在查找窗口仍然在屏幕上时继续与主窗口进行交互(滚动浏览文档等)。 –
非常感谢。我会将其标记为答案。我问这个问题的原因是我很难理解为什么XBAP不允许我创建一个模式窗口。另外为什么我不能在XBAP中使用子窗口? –