form.ShowDialog(IWin32Window)
オーバーロードではなくオーバーロードを呼び出すコードがありますform.ShowDialog()
が、現在アクティブなウィンドウをパラメーターとして渡します。
他のオーバーロードを使用すると、動作はそのままになるようです。単純なオーバーロードに切り替えても安全ですか? IWin32Window パラメータをいつ渡す必要がありますか?
form.ShowDialog(IWin32Window)
オーバーロードではなくオーバーロードを呼び出すコードがありますform.ShowDialog()
が、現在アクティブなウィンドウをパラメーターとして渡します。
他のオーバーロードを使用すると、動作はそのままになるようです。単純なオーバーロードに切り替えても安全ですか? IWin32Window パラメータをいつ渡す必要がありますか?
IWin32Window
パラメータは、ダイアログの所有者を指定するためのものです。この場合、これは、管理されていないウィンドウ (たとえば、使用している COM オブジェクトのウィンドウ) をダイアログの所有者として使用できるようにするためのインターフェイスです。
ここで、所有者を指定するべきではないと言うユーザーには同意できません。実際、可能な場合は常にフォームの所有者を指定することをお勧めします。ダイアログは非モーダル フォームほど重要ではないかもしれませんが、所有者を指定する習慣を身に付けることは常に良い考えです。
通常の状況では、void コンストラクターを使用する必要があります。ネイサンが言ったように、特定の所有者とのダイアログを表示したい場合にのみ、IWin32Window コンストラクターを使用してください。これは通常必要ありません。
ShowDialog() のドキュメントには、「現在アクティブなウィンドウが所有者として設定されたモーダル ダイアログ ボックスとしてフォームを表示する」と記載されています。したがって、フォームの所有者をアクティブ ウィンドウではないウィンドウに明示的に設定する必要がない限り、ShowDialog(IWin32Window) を使用する必要はありません。
別のアプリケーションまたはフォームでフォームを親にする場合は、IWin32Window パラメーターを使用できます。
たとえば、別のアプリケーションまたはフォームのハンドルを取得して、フォームをそのアプリケーションの一部として表示できます。詳細はこちら