質問
C# .NET 3.5 アプリ (WinForms と WPF の混合) で、ユーザーが大量のデータをインポートするフォルダーを選択できるようにしたいと考えています。現時点では、それを使用しています System.Windows.Forms.FolderBrowserDialog
でもそれはちょっとダサい。主な理由は、パスを入力できないためです (そのため、UNC パスを入力する代わりにネットワーク ドライブをマップする必要があります)。
もっと似たものが欲しいです System.Windows.Forms.OpenFileDialog
, ただし、ファイルではなくフォルダーが対象です。
代わりに何を使えばいいでしょうか?WinForms または WPF ソリューションは問題ありませんが、できれば Windows API への PInvoke は避けたいと考えています。
解決
自分で作成しないでください。完了しました。使用できます フォルダーブラウザダイアログEx - 組み込みのFolderBrowserDialogの再利用可能な派生物。これにより、UNC パスも含めたパスを入力できます。また、コンピューターやプリンターを参照することもできます。内蔵FBDと同じように動作しますが...より良い。
完全なソースコード。無料。MS-パブリックライセンス。
それを使用するコード:
var dlg1 = new Ionic.Utils.FolderBrowserDialogEx();
dlg1.Description = "Select a folder to extract to:";
dlg1.ShowNewFolderButton = true;
dlg1.ShowEditBox = true;
//dlg1.NewStyle = false;
dlg1.SelectedPath = txtExtractDirectory.Text;
dlg1.ShowFullPathInEditBox = true;
dlg1.RootFolder = System.Environment.SpecialFolder.MyComputer;
// Show the FolderBrowserDialog.
DialogResult result = dlg1.ShowDialog();
if (result == DialogResult.OK)
{
txtExtractDirectory.Text = dlg1.SelectedPath;
}
他のヒント
残念ながら、FolderBrowserDialog 以外にフォルダーを選択するためのダイアログはありません。このダイアログを自分で作成するか、PInvoke を使用する必要があります。
これまでのところ、回答がなかったことを踏まえると、 私の同じ質問, 答えは、独自のダイアログを最初から作成することだと思います。
VB6 の共通ダイアログをサブクラス化することについてはあちこちで見てきました。これは解決策の一部かもしれないと思いますが、ダイアログが選択していると考えているものを変更することについては何も見たことがありません。PInvoke やその他のトリックを使用して .NET 経由でも可能ですが、それを実行するコードはまだ見たことがありません。
私 知る これは可能ですが、Visual Studio では VS 2003 以降行われているため、Vista 固有ではありません。
誰かがあなたか私のどちらかに答えてくれることを願っています。
同様のソリューションを何時間も探した後、私は見つけました この答え による リートナイトシェイド に 実用的な解決策.
このソリューションが他のソリューションよりも優れていると私が信じている点が 3 つあります。
- 使い方は簡単です。 プロジェクトに 2 つのファイル (いずれにしても 1 つに結合できます) を含める必要があるだけです。
- 標準に戻ります フォルダーブラウザダイアログ XP 以前のシステムで使用する場合。
- 作成者は、適切と思われる目的でコードを使用する許可を与えます。
ライセンス自体はありません。コードを自由に使用して何を実行するかは自由です。
コードをダウンロードする ここ.