web-gelistirme-sc.com

Bir klasör seçmek için OpenFileDialog nasıl kullanılır?

Klasörleri seçmek için OpenFileDialog nasıl kullanılır?

Aşağıdaki projeyi kullanacaktım: https://github.com/scottwis/OpenFileOrFolderDialog

Ancak bir sorunla karşılaştım. GetOpenFileName işlevini ve OPENFILENAME yapısını kullanır. Ve OPENFILENAME, templateID adlı bir üyeye sahiptir. İletişim şablonu için tanımlayıcıdır. Proje ayrıca res1.rc dosyasını ve şablonlu iletişim kutusunu da içeriyor. Ancak bu dosyayı C # projeme nasıl ekleyeceğimi bilemedim.

Klasörleri seçmek için OpenFileDialog__ kullanmanın daha iyi bir yolu var mı?

207
Yun

Temel olarak FolderBrowserDialog sınıfına ihtiyacınız var:

Kullanıcıdan bir klasör seçmesini ister. Bu sınıf miras alınamaz.

Örnek:

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");
    }
}

Eğer WPF 'da çalışıyorsanız referansı System.Windows.Forms' a eklemelisiniz.

ayrıca Directory sınıfı için using System.IO eklemeniz gerekir

331
Ionică Bizău

FolderBrowserDialog kullanmaktan kaçınmak isteyen gelecekteki kullanıcılar için bir not olarak, Microsoft, CommonOpenFileDialog adı verilen, IsFolderPicker moduna ayarlanabilen yararlı bir iletişim kutusu olan WindowsAPICodePack adında bir API yayınlamak için kullanılır.

Nuget paketlerine erişiminiz varsa, halka açık listelerde WindowsAPICodePack olarak kullanılabilir.

İçerme çizgisi için:

using Microsoft.WindowsAPICodePack.Dialogs;

Kullanımı:

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

DİKKAT: Resmi Microsoft Nuget Paketi şuan kullanıma hazır

  • Microsoft.WindowsAPICodePack Çekirdekli
  • Microsoft.WindowsAPICodePack-Shell

her paket Microsoft'a aittir ve her ikisini de kurar.
Proje URL'si: http://code.msdn.Microsoft.com/WindowsAPICodePack .

NuGet kullanıcısı aybe , bir dizi resmi olmayan paket yükledi. Çoğu insan ona güvenilir bir kaynak olarak güveniyor gibi görünmektedir.

CommonOpenFileDialog işlevini kullanmak için yüklemem gereken buydu. (nuget bağımlılıkları ele aldı)

Install-Package WindowsAPICodePack-Shell
146
Joe

Garip cevaplar/oylar, fakat hiç kimse aşağıdaki kodu cevap olarak eklemiyor:

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

OpenFileDialog kullanan bir kesin çözüm vardır; burada ValidateNames ve CheckFileExists hem false olarak ayarlanır ve FileName, bir dizinin seçildiğini belirtmek için alay değeri verilir. 

Kullanıcılara bir klasörün nasıl seçileceği konusunda kafa karıştırıcı olduğu için hack diyorum. İstediğiniz klasörde olmaları gerekir ve dosya adı "Klasör Seçimi" derken sadece Aç düğmesine basın. 

 C# Folder selection dialog

Bu dayanmaktadır Aynı iletişim kutusundan dosya veya klasörü seçin Denis Stankovski tarafından.

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);
    // ...
}
15
Daniel Ballinger

Bana sanki FolderBrowserDialog dan hemen sonra olduğunuz gibi geliyor.

14
Simon Whitehead

İşte tüm kaynakların tek ve basit bir Zip dosyasında mevcut olduğu başka bir çözüm.

OpenFileDialog'u Windows 7+ Klasör Seçimi iletişim kutusu gibi çalışmasını sağlayan ek pencere bayrakları ile birlikte sunar. 

Web sitesi başına, kamu malı olan: "Yapacağınız ve koduyla yapacağınız gibi lisansınız yok."

Archive.org bağlantıları:

1
Ben Keene

Sırasıyla Windows Forms ve WPF için bir klasör tarayıcısı iletişim kutusu uygulayan Ookii Dialogs kitaplıklarına bakın.

 enter image description here

Ookii.Dialogs.WinForms

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


Ookii.Dialogs.Wpf

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

0
Caio Proiete