Bilgisayardaki bir klasöre gözatmak ve klasörü seçmek için Windows API’si ile gelen FolderBrowserDialog kontrolü kullanılır. Windows Forms denetimi olan bu denetim ile klasör seçmek için uygun bir yöntemdir. FolderBrowserDialog kullanıldığında aşağıdaki gibi bir şekil karşımıza çıkmaktadır.
C# FolderBrowserDialog Referansı Ekleme
FolderBrowserDialog kontrolünü oluşturmadan System.Windows.Forms isim uzayının eklendiğinden emin olun. Ayrıca yazdığınız uygulama ve sistem türüne göre referans olarak eklemeniz gerekebilir. Aşağıdaki gibi Solution Exp -> Add -> Referances ile ekleyebilirsiniz.
Yukarıdaki referans yoksa : Referanslar içinde System.Windows.Forms DLL bağlantısını bulmazsanız .Buradan İNDİR bağlantısına tıklayıp indirebilirsiniz. Sonrada Browse seçeneği ile projeye DLL dosyasını dahil edebilirsiniz. (Bu durum her PC kullanıcısının başına genellikle gelmez.)
Referansı ekledikten sonra isim alanına şu using ifadesini ekleyin. Referansı aşağıdaki şekilde ekledikten sonra artık WinForms olarak projenin içinde bu DLL Sınıflarını kullanacağız.
1 2 3 |
using WinForms = System.Windows.Forms; |
C# FolderBrowserDialog Oluşturma
Düzenlemeleri yaptıktan sonra uygulamanın arayüzünün yazılışına geçebiliriz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="150"></ColumnDefinition> <ColumnDefinition Width="*"></ColumnDefinition> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="50"></RowDefinition> <RowDefinition Height="*"></RowDefinition> </Grid.RowDefinitions> <Button x:Name="button" Margin="5" Grid.Column="0" Grid.Row="0" Content="Resim Klasörü Aç" Click="button_Click" /> <ListBox x:Name="listBox" Margin="5" Grid.Column="0" Grid.Row="1" /> <Image x:Name="image" Margin="5" Grid.Column="1" Grid.Row="0" Grid.RowSpan="2"/> </Grid> |
Button Click ile Dosyaları Listeleme
Arayüz tasarımı yapıldıktan sonra Resim Klasörü Aç butonuna tıklandığında aşağıdaki şekilde FolderBrowserDialog nesnesi oluşturulup, ilgili klasördeki dosyalar foreach ile okunuyor. Mevcut uygulamada klasördeki resimleri gösterme hedeflendiği için sonu png,jpg yada jpeg olan dosyaları listelendi.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
//FolderBrowserDialog nesnesini oluşturma WinForms.FolderBrowserDialog fbd = new WinForms.FolderBrowserDialog(); //Kullanıcı bir klasör seçip tamam dediğinde if (fbd.ShowDialog() == WinForms.DialogResult.OK) { listBox.Items.Clear(); //fbd.SelectedPath ile dialog yolunu alıyor. //Directory.GetFiles ile ilgili path içindeki dosyaları okuma yapıyor string[] dosyalar = Directory.GetFiles(fbd.SelectedPath); foreach (string dosya in dosyalar) { if (dosya.EndsWith(".jpg") || dosya.EndsWith(".jpeg")|| dosya.EndsWith(".png")) listBox.Items.Add(dosya); } } |
(Listbox SelectionChanged Olayı)
Listbox içinde bir resim nesnesi yolu seçildiğinde ilgili yolu Image nesnesine URI olarak ekliyoruz.
1 2 3 |
image.Source = new BitmapImage(new Uri(listBox.SelectedItem.ToString())); |
Uygulama 2
Örneği hazırladıktan sonra şu şekilde geliştirmek mümkün. Listbox içinde resimlerin yolları yerine küçük semboller gösterilip sembole tıklandığında büyük olarak sağ tarafta gösterme sağlanabilir.
(Button Click)
Yukarıdaki button click olayına biraz daha ekleme yaparak örnek resim nesnesi oluşturup listbox içine bu nesneleri yerleştiriyoruz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
//FolderBrowserDialog nesnesini oluşturma WinForms.FolderBrowserDialog fbd = new WinForms.FolderBrowserDialog(); //Kullanıcı bir klasör seçip tamam dediğinde if (fbd.ShowDialog() == WinForms.DialogResult.OK) { listBox.Items.Clear(); //fbd.SelectedPath ile dialog yolunu alıyor. //Directory.GetFiles ile ilgili path içindeki dosyaları okuma yapıyor string[] dosyalar = Directory.GetFiles(fbd.SelectedPath); if(dosyalar.Length>0) foreach (string dosya in dosyalar) { if (dosya.EndsWith(".jpg") || dosya.EndsWith(".jpeg")|| dosya.EndsWith(".png")) { Image resim = new Image(); resim.Source = new BitmapImage(new Uri(dosya)); listBox.Items.Add(resim); //dosya adı ve yolunu listeye ekle resim.Width = 100; } } } |
(Listbox SelectionChanged Olayı)
Listbox yapısı değiştirildiği için artık resim listbox içindeki resim nesnerinin yolunu alacağız.
1 2 3 4 |
Image aktifResim = (Image)listBox.SelectedItem; image.Source = new BitmapImage(new Uri(aktifResim.Source.ToString())); |