私はこの問題で立ち往生しているc#imでプログラムを開発しています。
特定のディレクトリを参照するダイアログボックスを表示したい。
OpenDialogFolderとSaveDialogがあることは知っていますが、特定のディレクトリダイアログボックスを開くだけで、ファイルを保存したり開いたりしたくありません。
このスクリーンショットのように:
Windowsエクスプローラーのコピーを開きたいようです。これを行うには、Process.Start()を呼び出し、ファイル名のないフォルダーパスのみを指定します。
Process.Start(@"C:\Temp\");
コマンドラインでこのようなコマンド(またはショートカットまたは実行コマンド)を指定した場合のWindowsシェルのデフォルトの動作は、Windowsエクスプローラーを開いて、指定したパスの内容を表示することです。
現在、Windowsエクスプローラーは外部プロセスであり、起動してから実行させます。したがって、ダイアログが別のウィンドウにフォーカスを失うのを防ぐように、モーダルダイアログボックスのように正確に動作することはありません。ただし、Process.Start(プロセス)の結果を変数に割り当て、パラメーターなしでそのプロセスでWaitForExit()メソッドを呼び出すことにより、ダイアログの「アプリケーションで他に何もできない」動作を模倣できます。 。これにより、開いたエクスプローラウィンドウをユーザーが閉じるまで、アプリケーションのメインスレッドがブロックされます。完璧ではありません。スレッドをブロックすることにより、アプリケーションは、それ自体を描画したり、ダイアログが中断されたウィンドウでも実行できるその他の基本的なことを実行したりする要求に応答せず、技術的に「アクティブ化」できます。Windowsエクスプローラーの起動に使用したウィンドウ。Windowsエクスプローラーの前に表示されます。エクスプローラーウィンドウを最小化することもでき(ダイアログでは通常許可されないもの)、それを防ぐためにできることはあまりありません。