OpenFileDialog
を使用してフォルダを選択する方法
私は次のプロジェクトを使用するつもりでした: https://github.com/scottwis/OpenFileOrFolderDialog
しかし、私は一つの問題に直面しました。 GetOpenFileName
関数とOPENFILENAME
構造体を使います。そしてOPENFILENAME
はtemplateID
という名前のメンバーを持ちます。ダイアログテンプレートの識別子です。プロジェクトにはres1.rc
ファイルとテンプレートダイアログinitも含まれています。しかし、このファイルを自分のC#プロジェクトに添付する方法を理解できませんでした。
フォルダを選択するのにOpenFileDialog
を使うもっと良い方法はありますか?
基本的には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
を追加する必要があります
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);
}
各パッケージはマイクロソフトによるもので、両方をインストールします。
プロジェクトURL: http://code.msdn.Microsoft.com/WindowsAPICodePack 。
NuGetユーザー aybe は一連の非公式パッケージをアップロードしました。ほとんどの人は信頼できる情報源として彼を信頼しているようです。
CommonOpenFileDialog
を使うためにインストールする必要があるのはこれだけです。 (nugetが依存関係を処理しました)
Install-Package WindowsAPICodePack-Shell
それほど多くの答え/票を投げかけているのは不思議ですが、答えとして次のコードを追加する人はいません。
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
}
}
OpenFileDialog
とValidateNames
の両方がfalseに設定され、ディレクトリが選択されていることを示すためにCheckFileExists
にモック値が与えられるFileName
を使用したハックな解決策があります。
フォルダを選択する方法についてユーザーを混乱させるのでハックを言う。目的のフォルダに入っている必要があり、ファイル名に「フォルダの選択」と表示されているときに[開く]を押すだけです。
これは 同じダイアログからのファイルまたはフォルダの選択 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);
// ...
}
FolderBrowserDialog の直後のように聞こえます。
これは他の解決策で、すべてのソースが単一の単純なZipファイルで利用可能です。
OpenFileDialogに追加のWindowsフラグを付けて、Windows 7以上のフォルダ選択ダイアログのように機能させます。
Webサイトによると、それはパブリックドメインです。「あなたが自由に利用して、あなたがすることをすることを自由に行えるようなライセンスはありません。」
Archive.orgのリンク:
それぞれWindowsフォームとWPFのためのフォルダブラウザダイアログの実装を持っているOokii Dialogsライブラリを見てください。
Ookii.Dialogs.WinForms
Ookii.Dialogs.Wpf