26

C#.NET 3.5アプリ(WinFormsとWPFの組み合わせ)で、ユーザーが大量のデータをインポートするフォルダーを選択できるようにします。現時点では使用してSystem.Windows.Forms.FolderBrowserDialogいますが、それは少し足りないです。主な理由は、パスを入力できないためです(したがって、UNCパスを入力する代わりに、ネットワークドライブをマップする必要があります)。

のようなものがSystem.Windows.Forms.OpenFileDialog欲しいのですが、ファイルではなくフォルダ用です。

代わりに何を使用できますか?WinFormsまたはWPFソリューションは問題ありませんが、回避できる場合は、WindowsAPIにPInvokeを使用しないことをお勧めします。

4

4 に答える 4

36

自分で作成しないでください。完了しました。組み込みのFolderBrowserDialogの再利用可能な派生物であるFolderBrowserDialogExを使用できます。これにより、パス、さらには UNC パスを入力できます。また、それを使用してコンピューターまたはプリンターを参照することもできます。組み込みの FBD と同じように機能しますが、... より優れています。

完全なソース コード。無料。MS パブリック ライセンス。

FolderBrowserDialogEx

それを使用するコード:

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;
}
于 2009-03-09T04:55:47.160 に答える
1

残念ながら、フォルダを選択するためのFolderBrowserDialog以外のダイアログはありません。このダイアログを自分で作成するか、PInvokeを使用する必要があります。

于 2008-09-05T15:08:53.737 に答える
0

これまでのところ、私の同じ質問に対する回答がないことに基づいて、答えは独自のダイアログを最初から作成することであると思います。

VB6 から共通ダイアログをサブクラス化することについてあちこちで見てきましたが、これは解決策の一部であると思いますが、ダイアログが選択していると考えているものを変更することについては何も見たことがありません。PInvoke やその他のトリックを介して .NET を介して可能ですが、それを実行するコードをまだ見ていません。

Visual Studio が VS 2003 以降にそれを行っているため、可能であり、Vista 固有ではないことはわかっています

誰かがあなたまたは私のものに答えてくれることを願っています!

于 2008-09-05T16:08:56.027 に答える
0

同様のソリューションを何時間も検索した後、 leetNightShadeによる実用的なソリューションによるこの回答を見つけました。

このソリューションが他のすべてのソリューションよりもはるかに優れていると私が信じている 3 つの点があります。

  1. 使い方は簡単です。 プロジェクトに 2 つのファイル (とにかく 1 つに結合できます) を含める必要があるだけです。
  2. XP 以前のシステムで使用すると、標準のFolderBrowserDialogにフォールバックします。
  3. 作成者は、あなたが適切と考えるあらゆる目的のためにコードを使用する許可を与えます。

    ライセンス自体はありません。コードを自由に取り、コードを使用して何をするかは自由です。

コードはこちらからダウンロードしてください。

于 2013-06-09T15:04:19.723 に答える