C# WPF

WPF FolderBrowserDialog Kullanımı

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.

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.

    <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.

            //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.

        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.

            //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.

            Image aktifResim = (Image)listBox.SelectedItem;
            image.Source = new BitmapImage(new Uri(aktifResim.Source.ToString()));

 

 

 

 

Yorum Yap