顶级窗口,子窗口,对话(模态)窗口和非对话(无模式)窗口之间有什么区别?

时间:2015-10-15 04:11:05

标签: c# wpf windows winforms

任何人都可以告诉我如何区分它们吗?

我很难理解顶级子窗口与对话/非对话窗口的区别因素是什么? 顶级窗口可以是对话/非对话窗口吗? 子窗口可以是对话/非对话窗口吗?

3 个答案:

答案 0 :(得分:4)

顶级表单由桌面拥有,而子表单属于另一种表单;这意味着关闭或最小化拥有表单也会影响子表单。

模态表单/对话框阻止调用线程,直到表单关闭,而无模式表单允许您在显示时与应用程序中的其他表单进行交互。任何形式都可以是模态/无模式的,无论它是顶层还是子形式 - 但是模态对话框的默认行为是由导致它们显示的形式所拥有。

答案 1 :(得分:2)

来自MSDN

模态

  

在继续使用应用程序的其余部分之前,必须先关闭或隐藏模式窗体或对话框

无模式

  

无模式表单允许您在表单和另一个表单之间移动焦点,而无需关闭初始表单。

顶级窗口可以是模态(对话框)或无模式。

顶级窗口由桌面拥有,因此它不能是父表单的子级。

由父表单拥有的子窗口不是顶级表单,因为它有父表单。但它可以位于Z顺序的顶部,并且可以是模态或无模式,具体取决于它的显示方式,分别为pop()ShowDiaglog()

答案 2 :(得分:1)

顶级窗口:不属于任何其他窗口的窗口,因此它们管理自己的生命周期。示例记事本窗口

子窗口:由其他窗口拥有的窗口。这个其他窗口本身可以是顶级或子级。示例编辑框或记事本的状态栏,因此如果您关闭记事本窗口编辑框,状态栏等窗口将消失。

模态窗口:阻止当前线程执行直到它处于活动状态的窗口。如果它是子窗口,则将阻止与其父窗口的任何交互。记事本的“示例字体”对话框,如果打开“字体”窗口,则无法在记事本窗口中键入任何内容。

无模式窗口:当活动线程处于活动状态时不会阻止当前线程执行的窗口,因此如果它是子窗口,它允许您与其父窗口进行交互。示例“记事本”的“查找”对话框,如果按Ctrl + F并打开“查找”窗口,则可以将其放在一边并继续在主记事本窗口中键入。

重要的是,窗口可以是Child或Top级别,但不能同时为。

希望这有帮助。