2009-04-22 16 views
1

form.ShowDialog()ではなくform.ShowDialog(IWin32Window)オーバーロードを呼び出すが、パラメータとして現在のアクティブウィンドウに渡すコードがあります。いつform.ShowDialog(IWin32Window)ではなくform.ShowDialog()を呼び出す必要がありますか?

もう一方のオーバーロードを使用すると、動作はそのまま残ります。より簡単な過負荷に切り替えることは安全ですか?いつIWin32Windowパラメータを渡したいですか?

答えて

3

IWin32Windowパラメータは、ダイアログの所有者を指定するためのものです。この場合、それはインターフェイスで、非管理ウィンドウ(たとえば、使用しているCOMオブジェクトからのもの)をダイアログの所有者として持つことができます。

ここでは、所有者を指定してはいけないと言っているユーザーに同意する必要があります。実際には、可能な場合は常にフォームの所有者を指定することをお勧めします。ダイアログは非モーダルフォームほど重要ではないかもしれませんが、所有者を指定する習慣を得ることは常に良い考えです。

+0

意図が明確に示されているので、良い方法です。 –

0

フォームを別のアプリケーションまたはフォームの親として使用する場合は、IWin32Windowパラメーターを使用できます。

たとえば、別のアプリケーションやフォームのハンドルを取得し、そのアプリケーションの一部としてフォームを表示することができます。詳細はこちらhere

0

通常の状況では、voidコンストラクタを使用する必要があります。 Nathanと同様に、特定の所有者とのダイアログを表示する場合は、IWin32Windowコンストラクタを使用してください。これは通常必要ではない。

ShowDialog()のドキュメントでは、「現在のアクティブなウィンドウを所有者として設定したモーダルダイアログボックスとしてフォームが表示されます」と記載されています。したがって、明示的にフォームの所有者をアクティブなウィンドウではないウィンドウに設定する必要がない限り、ShowDialog(IWin32Window)を使用する必要はありません。

+0

あなたの意図を伝えるためにコードを書くことは常に有益です。アクティブなウィンドウに親としたい場合でも、そのウィンドウをパラメータとして指定すると、コードをその意図に明白にするダイアログが表示されているときにどのウィンドウをアクティブにするかを決定するコードを維持します。 –

+0

アクティブなウィンドウが親であるかどうか*を確認したい場合は、パラメータなしのオーバーロードのみを使用する必要がありますか? – Ant

関連する問題