3

我有一个表格,需要放在另外两个表格之上。它还应该使用上面的两种形式之一最小化。我发现这就像我这样做时所描述的那样工作

form.Show(null);

但是,form.Show()不像描述的那样工作。为什么?我意识到我将所有者作为参数传递,但所有者为空。那么为什么表单的行为正确呢?

4

2 回答 2

10

请注意,Show() 是 Control 类的方法,而 Show(IWin32Window) 是 Form 类的方法。这是 Show(IWin32Window) 方法的固有行为——如果所有者为空,则将活动窗口用作所有者。Control.Show() 没有所有者的概念。您可以通过MS 参考源或反编译器进行确认。

IntPtr hWndActive = UnsafeNativeMethods.GetActiveWindow();
IntPtr hWndOwner = owner == null ? hWndActive : Control.GetSafeHandle(owner); 
于 2012-10-19T20:46:01.393 回答
2

当您将 null 作为所有者窗口传递时,您会强制 Show(owner) 方法重载以自行查找所有者。它将选择活动窗口。这通常是您想要的,但并非总是如此。旋转命运之轮的充分理由很少。

我没有得到问题的“show()不起作用”部分。如果您在没有参数的情况下调用 Show(),则表单将没有所有者。

于 2012-10-19T20:46:50.250 回答