ShowDialog();
和ShowDialog(IWin32Window);
似乎对我做同样的事情。文档也不是很清楚。
我被告知ShowDialog(IWin32Window);
将确保对话窗口位于作为所有者窗口传入的内容之上。
MSDN文档没有提到这一点,所以感觉有点像黑魔法。
答案 0 :(得分:9)
http://msdn.microsoft.com/en-us/library/w61zzfwe.aspx清楚地表明该参数代表了所有者窗口。这就是所有者窗口的行为 - 它留在孩子身后并且不会关闭,让孩子仍然显示。
答案 1 :(得分:5)
调用ShowDialog()时,当前活动窗口成为对话框的所有者。如果要指定特定所有者,请使用此方法的其他版本(ShowDialog(IWin32Window))。
这在MSDN文档中有说明。
答案 2 :(得分:2)
内部ShowDialog()
使用null参数调用ShowDialog(IWin32Window)
。如果参数不为null,则将其设置为表单的所有者。如果owner为null,则会使用GetActiveWindow()
向活动窗口获取IntPtr
并将其用作所有者。您可以使用ILSpy自行查看。
答案 3 :(得分:1)
.NET允许表单“拥有”其他表单。拥有的表格很有用 浮动工具箱和命令窗口。拥有形式的一个例子是 Microsoft Word中的“查找和替换”窗口。当所有者窗口是 最小化,自有形式也自动最小化。当一个 拥有的表单与其所有者重叠,它始终显示在顶部。
(c)Matthew MacDonald的“Pro .NET 2.0 Windows窗体和自定义控件”。
当 ShowDialog 显示新表单时,隐式关系是 在当前活动表单之间建立,称为所有者 形式和新形式,称为自有形式。这种关系 确保拥有的表单是活动表单并始终显示 所有者表单的顶部。
这种关系的一个特点是拥有的形式影响了 所有者表单的行为(使用 ShowDialog 时):
- 无法最小化,最大化甚至移动所有者表单。
- 拥有的表单会阻止鼠标和键盘输入到所有者表单。
- 当拥有的表单为。时,所有者表单最小化。
- 只能关闭所拥有的表格。
- 如果所有者和拥有的表单都被最小化,并且用户按Alt + Tab切换到拥有的表单,则激活拥有的表单。
与ShowDialog方法不同,调用显示方法会 不建立隐含的所有者拥有关系。这意味着 任何一种形式都可以是当前活跃的形式。
没有隐含的所有者拥有的关系,所有者和拥有的表单 同样可以最小化,最大化或移动。如果用户关闭任何 除主要形式以外的形式,最近活跃的形式是 重新激活。
虽然 ShowDialog建立隐式所有者拥有的关系, 所拥有的表单没有内置的方式来回调或查询 打开它的形式。在无模式的情况下,您可以设置新的 form的所有者财产,以建立所有者拥有的关系。作为一个 快捷方式,您可以将所有者表单作为参数传递给重载 Show方法,它也采用IWin32Window参数 (IWin32Window由公开的Windows窗体UI对象实现 Win32 HWND属性通过IWin32Window.Handle属性)。
表单在显式模式所有者拥有的表单中的行为 关系与其隐式模态对应关系相同,但是 无模式的所有者拥有的关系提供了额外的行为 非所有者拥有的无模式案件。首先,无模式拥有的形式总是如此 出现在所有者表单的顶部,即使其中任何一个都可以处于活动状态。 当您需要保留表单(例如浮动工具)时,这非常有用 窗口,位于应用程序中的其他窗体之上。第二,如果 用户按Alt + Tab从所有者切换,拥有的表单跟随 适合。为了确保用户知道哪个表单是主表单, 最小化所有者隐藏所有自有表单的任务栏按钮, 只留下所有者的任务栏按钮。
(c)Chris Sells的“Windows Forms 2.0 Programming”,Michael Weinhardt。
答案 4 :(得分:0)
frm2.ShowDialog()使frm2成为模型对话框,除非我们关闭frm2的实例,否则我们无法点击form1上的任何地方。
frm2.show()没有这样的限制。