C# İle OpenFileDialog Kullanımı

09.09.2012 Hikmet Okumuş 38085 14 C#


OpenFileDialog kontrolü, bir dialog ekranı ile dosya seçmemize yaramaktadır. Örnek olarak Visual Studio içerisinde Project menüsü altında bulunan Add Existing Item menüsünü gösterebiliriz. Bu ekran ile bir OpenFileDialog ekranı açılır ve dosya seçim işlemi gerçekleştirilir.
OpenFileDialog kontrolünü aşağıdaki gibi tanımlıyoruz.
OpenFileDialog file = new OpenFileDialog();
ShowDialog() metodu ile Dialog ekranını açıyoruz.
        private void buttonDosyaSec_Click(object sender, EventArgs e)
        {
            OpenFileDialog file = new OpenFileDialog();
            file.ShowDialog();
        }
Bu şekilde dialog ekranı açılacaktır. Ve tüm dosyaları bize listeleyecektir. Eğer sadece belli uzantılara sahip dosyaları görüntülemek istersek Filter özelliğini belirtmemiz gerekecektir.
        private void buttonDosyaSec_Click(object sender, EventArgs e)
        {
            OpenFileDialog file = new OpenFileDialog();
            file.Filter = "Excel Dosyası |*.xlsx";
            file.ShowDialog();
        }
Dialog ekranı açıldığında filter combobox' ı içerisinde .xlsx uzantısı görünecektir. Eğer birden fazla filter değeri girmiş olsaydık her dafasında en başka .xlsx uzantısına göre filtreleme yapacaktır. Seçime göre diğer değerlere göre filtreleme yapacaktır. Birden fazla girilen filtre değerinde varsayılan olarak 1. sırada bulunan filtre değeri getirilir. Bunu değiştirmek için FilterIndex özelliğine filtre index' i atanır. FilterIndex 1 den başlamaktadır.
        private void buttonDosyaSec_Click(object sender, EventArgs e)
        {
            OpenFileDialog file = new OpenFileDialog();
            file.Filter = "Excel Dosyası |*.xlsx| Excel Dosyası|*.xls";
            file.FilterIndex = 2;
            file.ShowDialog();
        }
FilterIndex 2 olarak belirtildiği için ekran açıldığında .xls uzantısı görünecektir.
Dialog her açıldığında aynı dizini göstermek isterseniz InitialDirectory özelliğine yol bilgisini setlememiz gerekecektir.
        private void buttonDosyaSec_Click(object sender, EventArgs e)
        {
            OpenFileDialog file = new OpenFileDialog();
            file.InitialDirectory = "C:\\";
            file.Filter = "Excel Dosyası |*.xlsx| Excel Dosyası|*.xls";
            file.FilterIndex = 2;
            file.ShowDialog();
        }
Artık dialog ekranı açıldığında ilk dizin olarak C dizini görüntülenecektir. InitialDirectory özelliğini bu şekilde kullanabileceğimiz gibi Environment class' ı altında bulunan SpecialFolder enumu ile de dizin bilgisini verebiliriz.
        private void buttonDosyaSec_Click(object sender, EventArgs e)
        {
            OpenFileDialog file = new OpenFileDialog();
            file.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
            file.Filter = "Excel Dosyası |*.xlsx| Excel Dosyası|*.xls";
            file.FilterIndex = 2;
            file.ShowDialog();
        }
InitialDirectory string bir değer aldığı için Environment.GetFolderPath fonksiyonunu kullanarak klasör dizinimizi belirtiyoruz.
InitialDirectory belirtilmez ise varsayılan bir dizin görüntülecektir. Bazen sürekli aynı dizini değilde seçilen son dizinin görüntülenmesi istenebilir. Bunu RestoreDirectory özelliği ile yapmaktayız. Varsayılan olarak RestoreDirectory özelliği false olarak setlenmiştir. True olarak setlediğimizde dialog bir önceki dosyanın seçildiği dizinden başlatılacaktır.
        private void buttonDosyaSec_Click(object sender, EventArgs e)
        {
            OpenFileDialog file = new OpenFileDialog();
            //file.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
            file.Filter = "Excel Dosyası |*.xlsx| Excel Dosyası|*.xls";
            file.FilterIndex = 2;
            file.RestoreDirectory = true;   
            file.ShowDialog();
        }
Dosya adı kısmına manuel bir dosya adı yazdığımızda eğer dosya yok ise ekrana bir mesaj çıkarmaktadır. Bu mesajı iptal etmek istersek CheckFileExists özelliğini false olarak setlemek gerekmektedir. Varsayılan olarak true değerini almaktadır.
        private void buttonDosyaSec_Click(object sender, EventArgs e)
        {
            OpenFileDialog file = new OpenFileDialog();
            file.Filter = "Excel Dosyası |*.xlsx| Excel Dosyası|*.xls";
            file.FilterIndex = 2;
            file.RestoreDirectory = true;
            file.CheckFileExists = false;
            file.ShowDialog();
        }
Dialog başlığı varsayılan olarak Aç şeklinde görüntülenecektir. Değiştirilmek istenildiğinde Title özelliğini setlemek gerekecektir.
        private void buttonDosyaSec_Click(object sender, EventArgs e)
        {
            OpenFileDialog file = new OpenFileDialog();
            file.Filter = "Excel Dosyası |*.xlsx| Excel Dosyası|*.xls";
            file.FilterIndex = 2;
            file.RestoreDirectory = true;
            file.CheckFileExists = false;
            file.Title = "Excel Dosyası Seçiniz..";
            file.ShowDialog();
        }
Seçilen bir dosyayının yol bilgisi FileName, dosyanın ismi ise SafeFileName özelliği ile öğrenilmektedir.
        private void buttonDosyaSec_Click(object sender, EventArgs e)
        {
            OpenFileDialog file = new OpenFileDialog();
            //file.Filter = "Excel Dosyası |*.xlsx| Excel Dosyası|*.xls";
            file.FilterIndex = 2;
            file.RestoreDirectory = true;
            file.CheckFileExists = false;
            file.Title = "Excel Dosyası Seçiniz..";
            file.ShowDialog();

            string DosyaYolu = file.FileName;
            string DosyaAdi = file.SafeFileName;
        }
Burada önemli bir uyarı yapayım. Yukarıdaki gibi bir işlemde OpenFileDialog un ShowDialog() metodunun geriye döndürdüğü değer kontrol edilmeden bir değişkene setlendiğinde hata alınmaz. Fakat bazı işlemlerde bu kontrolü yapmamız zorunlu olacaktır. Aksi halde program null değer geldiği için kırılacaktır. Kontrolü aşağıdaki gibi yapmamız gerekmektedir.
        private void buttonDosyaSec_Click(object sender, EventArgs e)
        {
            OpenFileDialog file = new OpenFileDialog();
            file.Filter = "Excel Dosyası |*.xlsx| Excel Dosyası|*.xls";
            file.FilterIndex = 2;
            file.RestoreDirectory = true;
            file.CheckFileExists = false;
            file.Title = "Excel Dosyası Seçiniz..";

            if (file.ShowDialog() == DialogResult.OK)
            {
                string DosyaYolu = file.FileName;
                string DosyaAdi = file.SafeFileName;
            }
        }
Görüldüğü gibi ShowDialog() metodu if içerisinde çağırılmaktadır. Ayrıca if dışında bir çağırma işlemi yapılmamıştır. Dönen sonuç DialogResult ile kontrol edilmektedir. Eğer OK butonuna basılırsa kod çalışacaktır. İptal ya da çarpı ile kapatmak programı kırmayacaktır.
Şu ana kadar dialog ile tek bir dosya seçim işlemi yapabiliyoruz. Eğer birden fazla dosya seçilmek istenirse Multiselect özelliğini true olarak setlemek gerekecektir.
        private void buttonDosyaSec_Click(object sender, EventArgs e)
        {
            OpenFileDialog file = new OpenFileDialog();
            //file.Filter = "Excel Dosyası |*.xlsx| Excel Dosyası|*.xls";
            file.FilterIndex = 2;
            file.RestoreDirectory = true;
            file.CheckFileExists = false;
            file.Title = "Excel Dosyası Seçiniz..";
            file.Multiselect = true;

            if (file.ShowDialog() == DialogResult.OK)
            {
                string DosyaYolu = file.FileName;
                string DosyaAdi = file.SafeFileName;
            }
        }
Seçilen dosya birden fazla ise dosya yollarını FileNames, dosya adılarını ise SafeFileNames' e string dizi olarak setlemektedir.
Kontrol üzerinde bir çok ayar gerçekleştirdik. Eğer ayarları varsayılana geri döndürmek istenirse Reset() metodu kullanılmalıdır.
file.Reset();

Başarılar dilerim.


Kullanıcı Yorumları


hikmet okumuş makale yorum
ceyhun
01.04.2014 15:23:55
çok yararlı tşkler
hikmet okumuş makale yorum
Mustafa Uğuz
11.06.2014 18:57:37
Teşekkürler işime yaradı
hikmet okumuş makale yorum
Ziyaretçi
05.07.2014 15:20:45
iyi yapmıssın güzel yararlı
hikmet okumuş makale yorum
cihan
09.09.2014 23:54:31
merhabalar, çok güzel bir anlatım olmuş, teşekkür ediyorum bilgi paylaşımınızdan dolayı
hikmet okumuş makale yorum
serhat
17.09.2014 13:39:29
teşekkürler
hikmet okumuş makale yorum
Ender
22.10.2014 22:03:43
Basit bir uygulama yaptım seçilen resmi kopyalamak için opendialog' u 3 defa dan fazla açamıyorum şu hatayı veriyor yardım edin. Hata : Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
hikmet okumuş makale yorum
Hikmet Okumuş
28.10.2014 21:09:51
Merhaba Ender, Bu hatayı bir çok sebepten dolayı alabilirsin. Kodlama ile ilgili bir problem bulunmaktadır. Yazdığın kodu gönderirsen yardımcı olmaya çalışırım.
hikmet okumuş makale yorum
Misafir
29.11.2014 19:50:07
Güzel bir anlatım olmuş, teşekkürler.
hikmet okumuş makale yorum
Emre Pbu
29.01.2015 21:52:48
Çok Teşekkürler
hikmet okumuş makale yorum
Salih Hakan KAYA
03.10.2015 02:11:27
Teşekkür ederim emeğinize sağlık.
hikmet okumuş makale yorum
Bilal Şükür
14.12.2015 15:20:38
süper olmuş hocam elinize sağlık :) muhteşem.. çok işime yaradı...
hikmet okumuş makale yorum
babürhan gürdal
10.04.2016 23:13:12
teşşekkürler ciddi anlamda baya işime yaradı
hikmet okumuş makale yorum
AYSEL
07.06.2016 14:28:37
Emeğinize sağlık, eğitici bir çalışma olmuş cidden.
hikmet okumuş makale yorum
Hilmi Duran
03.08.2016 10:49:25
Detaylı anlatım için teşekkürler...


Yorum