Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 顶层窗口、子窗口、对话框(模态)窗口和非对话框(非模态)窗口之间有什么区别?_C#_Wpf_Windows_Winforms - Fatal编程技术网

C# 顶层窗口、子窗口、对话框(模态)窗口和非对话框(非模态)窗口之间有什么区别?

C# 顶层窗口、子窗口、对话框(模态)窗口和非对话框(非模态)窗口之间有什么区别?,c#,wpf,windows,winforms,C#,Wpf,Windows,Winforms,有人能告诉我如何区分它们吗 我很难理解顶级子窗口与对话/非对话窗口的区别因素是什么? 顶层窗口是否可以是对话框/非对话框窗口? 子窗口是否可以是对话框/非对话框窗口 顶级表单属于桌面,而子表单属于另一个表单;这意味着关闭或最小化所属表单也会影响子表单 模态窗体/对话框在窗体关闭之前阻止调用线程,而非模态窗体允许您在显示时与应用程序中的其他窗体交互。任何窗体都可以是模态/非模态的,无论它是顶级窗体还是子窗体-但是模态对话框的默认行为由导致它们显示的窗体所有。来源: 模态 在继续使用应用程序的其余部

有人能告诉我如何区分它们吗

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

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

模态窗体/对话框在窗体关闭之前阻止调用线程,而非模态窗体允许您在显示时与应用程序中的其他窗体交互。任何窗体都可以是模态/非模态的,无论它是顶级窗体还是子窗体-但是模态对话框的默认行为由导致它们显示的窗体所有。

来源:

模态

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

无模式

无模式表单允许您在表单和其他表单之间转移焦点,而无需关闭初始表单

顶级窗口可以是模态(对话框)或非模态

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


父窗体拥有的子窗口不是顶级窗体,因为它有父窗体。但它可以按Z顺序位于顶部,可以是模态的,也可以是非模态的,具体取决于它的显示方式,分别是
ShowDiaglog()
Show()

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

子窗口:属于其他窗口的窗口。另一个窗口本身可以是顶层或子窗口。例如,记事本的编辑框或状态栏,因此,如果关闭记事本窗口编辑框,状态栏等窗口将消失

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

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

重要的一点是,窗口可以是子级也可以是顶级,但不能同时是二者


希望这能有所帮助。

这是否意味着您可以拥有一个与其父窗口无模式的子窗口?@ZammyPage是的,这很常见;例如,在文本编辑器中,“查找”功能可能是一个无模式子窗口,允许您在“查找”窗口仍在屏幕上时继续与主窗口交互(滚动文档等)。非常感谢。我将把这标记为一个答案。我问这个问题的原因是我发现很难理解为什么XBAP不允许我创建模式窗口。还有,为什么我不能在XBAP中使用子窗口?您确定顶级窗口可以是模态窗口吗?是的。要以模式显示表单,请使用
ShowDialog()
方法。
Form.Modal
属性可用于测试显示表单的模态。看一下在“顶级窗口”上的扩展,并解释OP标题中提到的“子窗口”。目前,您只是在解释模态窗口和非模态窗口之间的区别。