2015-10-15 204 views

回答

4

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

模态窗体/对话框会阻止调用线程,直到窗体关闭,而非模态窗体允许您在显示时与应用程序中的其他窗体进行交互。任何形式都可以是模态/无模式的,无论它是顶级还是子级形式 - 但是模态对话的默认行为将归属于导致它们显示的形式。

+0

这是否意味着您可以拥有一个无模式的子窗口? –

+0

@ZammyPage是的,这很常见;例如,在文本编辑器中,查找功能可能是一个无模式子窗口,允许您在查找窗口仍然在屏幕上时继续与主窗口进行交互(滚动浏览文档等)。 –

+0

非常感谢。我会将其标记为答案。我问这个问题的原因是我很难理解为什么XBAP不允许我创建一个模式窗口。另外为什么我不能在XBAP中使用子窗口? –

2

MSDN

莫代尔

模式窗体或对话框必须关闭或隐藏,然后才能继续使用该应用程序的其他部分的工作。

无模式

模式窗体让你转移的形式,并且另一种形式之间的焦点,而不必关闭初始形式。

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

顶级窗口属于桌面,因此它不能是父窗体的子项。

父窗体拥有的子窗口,不是的顶级窗体,因为它具有父窗体。但它可以位于顶部,Z顺序为,根据其显示方式可以是模式或无模式,分别为ShowDiaglog()Show()

+0

你确定顶级窗口可以模态吗? –

+0

是的。要以模态方式显示表单,请使用'ShowDialog()'方法。 Form.Modal属性可用于测试显示表单的模态。看看[这里](https://msdn.microsoft.com/en-us/library/system.windows.forms.form.modal%28v=vs.110%29.aspx) – khargoosh

+0

考虑扩大_“top级别窗口“_并解释_”子窗口_“,如OP的标题所述。目前,您只是解释_modal_和_modeless_窗口之间的区别。 – MickyD

1

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

子窗口:其他窗口拥有的窗口。其他窗口本身可以是顶层或者子层。示例编辑记事本的框或状态栏,因此如果关闭记事本窗口编辑框,状态栏等窗口不见了。

模式窗口:阻止当前线程执行直到活动的窗口。如果它是一个子窗口,那么与其父窗口的任何交互都将被阻止。记事本的字体对话框示例如果您打开字体窗口,则无法在记事本窗口上键入任何内容。

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

重要的一点,一个窗口可以是Child或者Top,但不能同时为两个。

希望这会有所帮助。