web-dev-qa-db-ja.com

OpenFileDialogを使ってフォルダを選択する方法

OpenFileDialogを使用してフォルダを選択する方法

私は次のプロジェクトを使用するつもりでした: https://github.com/scottwis/OpenFileOrFolderDialog

しかし、私は一つの問題に直面しました。 GetOpenFileName関数とOPENFILENAME構造体を使います。そしてOPENFILENAMEtemplateIDという名前のメンバーを持ちます。ダイアログテンプレートの識別子です。プロジェクトにはres1.rcファイルとテンプレートダイアログinitも含まれています。しかし、このファイルを自分のC#プロジェクトに添付する方法を理解できませんでした。

フォルダを選択するのにOpenFileDialogを使うもっと良い方法はありますか?

222
Yun

基本的にはFolderBrowserDialogクラスが必要です。

ユーザーにフォルダーの選択を促します。このクラスは継承できません。

例:

using(var fbd = new FolderBrowserDialog())
{
    DialogResult result = fbd.ShowDialog();

    if (result == DialogResult.OK && !string.IsNullOrWhiteSpace(fbd.SelectedPath))
    {
        string[] files = Directory.GetFiles(fbd.SelectedPath);

        System.Windows.Forms.MessageBox.Show("Files found: " + files.Length.ToString(), "Message");
    }
}

_ wpf _ で作業する場合は、System.Windows.Formsへの参照を追加する必要があります。

Directoryクラスにもusing System.IOを追加する必要があります

343
Ionică Bizău

FolderBrowserDialogの使用を避けたい将来のユーザーのためのメモとして、マイクロソフトはCommonOpenFileDialogモードに設定できる、IsFolderPickerという便利なダイアログを持ったWindowsAPICodePackと呼ばれるAPIをリリースしていました。

あなたがnugetパッケージへのアクセス権を持っているなら、それはまだWindowsAPICodePackとして公開リストで利用可能です

Include行の場合

using Microsoft.WindowsAPICodePack.Dialogs;

使用法:

CommonOpenFileDialog dialog = new CommonOpenFileDialog();
dialog.InitialDirectory = "C:\\Users";
dialog.IsFolderPicker = true;
if (dialog.ShowDialog() == CommonFileDialogResult.Ok)
{
    MessageBox.Show("You selected: " + dialog.FileName);
}

注意:公式のMicrosoft Nugetパッケージは現在入手可能です

  • Microsoft.WindowsAPICodePack-Core
  • Microsoft.WindowsAPICodePack-Shell

各パッケージはマイクロソフトによるもので、両方をインストールします。
プロジェクトURL: http://code.msdn.Microsoft.com/WindowsAPICodePack

NuGetユーザー aybe は一連の非公式パッケージをアップロードしました。ほとんどの人は信頼できる情報源として彼を信頼しているようです。

CommonOpenFileDialogを使うためにインストールする必要があるのはこれだけです。 (nugetが依存関係を処理しました)

Install-Package WindowsAPICodePack-Shell
161
Joe

それほど多くの答え/票を投げかけているのは不思議ですが、答えとして次のコードを追加する人はいません。

using (var fldrDlg = new FolderBrowserDialog())
{ 
    //fldrDlg.Filter = "Png Files (*.png)|*.png";
    //fldrDlg.Filter = "Excel Files (*.xls, *.xlsx)|*.xls;*.xlsx|CSV Files (*.csv)|*.csv"

    if (fldrDlg.ShowDialog() == DialogResult.OK)
    {
        //fldrDlg.SelectedPath -- your result
    }
}
21
Andrew

OpenFileDialogValidateNamesの両方がfalseに設定され、ディレクトリが選択されていることを示すためにCheckFileExistsにモック値が与えられるFileNameを使用したハックな解決策があります。

フォルダを選択する方法についてユーザーを混乱させるのでハックを言う。目的のフォルダに入っている必要があり、ファイル名に「フォルダの選択」と表示されているときに[開く]を押すだけです。

C# Folder selection dialog

これは 同じダイアログからのファイルまたはフォルダの選択 Denis Stankovskiに基づいています。

OpenFileDialog folderBrowser = new OpenFileDialog();
// Set validate names and check file exists to false otherwise windows will
// not let you select "Folder Selection."
folderBrowser.ValidateNames = false;
folderBrowser.CheckFileExists = false;
folderBrowser.CheckPathExists = true;
// Always default to Folder Selection.
folderBrowser.FileName = "Folder Selection.";
if (folderBrowser.ShowDialog() == DialogResult.OK)
{
    string folderPath = Path.GetDirectoryName(folderBrowser.FileName);
    // ...
}
18

FolderBrowserDialog の直後のように聞こえます。

13
Simon Whitehead

これは他の解決策で、すべてのソースが単一の単純なZipファイルで利用可能です。

OpenFileDialogに追加のWindowsフラグを付けて、Windows 7以上のフォルダ選択ダイアログのように機能させます。

Webサイトによると、それはパブリックドメインです。「あなたが自由に利用して、あなたがすることをすることを自由に行えるようなライセンスはありません。」

Archive.orgのリンク:

2
Ben Keene

それぞれWindowsフォームとWPFのためのフォルダブラウザダイアログの実装を持っているOokii Dialogsライブラリを見てください。

enter image description here

Ookii.Dialogs.WinForms

https://github.com/caioproiete/ookii-dialogs-winforms


Ookii.Dialogs.Wpf

https://github.com/caioproiete/ookii-dialogs-wpf

1
Caio Proiete