2008-09-05 18 views
26

Bir C# .NET 3.5 uygulamasında (bir WinForms ve WPF karışımı) kullanıcının veri yükünü almak için bir klasör seçmesine izin vermek istiyorum. Şu anda, System.Windows.Forms.FolderBrowserDialog kullanıyor ama bu biraz topal. Esas olarak, içine yolu yazamayacağınız için (böylece bir UNC yolunu yazmak yerine bir ağ sürücüsünü eşleştirmeniz gerekir)..NET 3.5 ile bir klasör seçmek

System.Windows.Forms.OpenFileDialog gibi bir şeyden ziyade, dosyalar yerine klasörler için.

Bunun yerine ne kullanabilirim? Bir WinForms veya WPF çözümü iyi, ancak bunu önleyebilirsem Windows API'ye PInvoke etmemeyi tercih ederim.

cevap

36

Kendiniz oluşturma! Yapıldı. Yerleşik FolderBrowserDialog'un yeniden kullanılabilir bir türevi olan FolderBrowserDialogEx - 'u kullanabilirsiniz. Bu, bir yolu, hatta bir UNC yolunu yazmanıza izin verir. Bununla birlikte bilgisayarlara veya yazıcılara da göz atabilirsiniz. Yerleşik FBD gibi çalışır, ama ... daha iyi.

Tam Kaynak kodu. Ücretsiz. MS-Kamu lisansı.

FolderBrowserDialogEx

Kod kullanmak için:

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; 
} 
+30

Ahhhh! Parlak pembe! Gözlerim ... zavallı gözlerim ... – dthrasher

+11

kızım bunu yaptı ... – Cheeso

+6

Bu her zamanki mazeret değil mi? ;-) – Joey

1

Maalesef, klasör seçimi için FolderBrowserDialog dışında bir iletişim kutusu yok. Bu iletişim kutusunu kendiniz oluşturmanız veya PInvoke kullanmanız gerekir.

0

Şimdiye kadar, my identical question yanıtlarının eksikliğine bağlı olarak, cevabın kendi iletişiminizi sıfırdan başlattığını varsayalım.

VB6'dan gelen ortak diyalogları alt sınıflar hakkında burada ve orada bir şeyler görüyorum ve bunun çözümün bir parçası olabileceğini düşünüyorum, ancak iletişim kutusunun ne seçtiğini düşündüğüyle ilgili hiçbir şey görmedim. PInvoke ve diğer bazı püf noktaları aracılığıyla .NET aracılığıyla mümkün olabilir, ancak bunu yapan kodu görmem gerekiyor.

Mümkün olduğunu ve Visual Studio VS 2003

beri yapacağını yaptı çünkü Vista özel değil biliyorum Burada birileri senin mi benim ya cevap umuyor!

0

Ben a working solution için leetNightShade tarafından this answer bulunan benzer çözüm arayışlarıyla geçen saat sonra.

Bu çözümü tüm diğerlerinden daha iyi hale getirdiğine inandığım üç şey var.

  1. Kullanması kolaydır. Sadece projenizde iki dosya (bir tane ile birleştirilebilir) eklemenizi gerektirir.
  2. XP veya daha eski sistemlerde kullanıldığında, standart FolderBrowserDialog standardına geri döner.
  3. Yazar, uygun gördüğünüz herhangi bir amaç için kodu kullanma iznini verir.

    Kodunuzla alacağınız ve yapacağınız gibi ücretsiz bir lisans yoktur.

kodu here indirin.