3

他の 2 つのフォームの上に配置する必要があるフォームがあります。また、上にある 2 つのフォームのいずれかで最小化する必要があります。これは説明どおりに機能することがわかりました

form.Show(null);

ただし、form.Show()説明どおりに機能しません。なんで?パラメータとして所有者を渡していることに気付きましたが、所有者が null です。では、なぜフォームは正しく動作するのでしょうか?

4

2 に答える 2

10

Show()はControlクラスのメソッドであり、Show(IWin32Window)はFormクラスのメソッドであることに注意してください。これは、Show(IWin32Window)メソッドの組み込み動作です。所有者がnullの場合、アクティブなウィンドウが所有者として使用されます。Control.Show()にはOwnerの概念はありません。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 に答える