C# İle OpenFileDialog Kullanımı


9 Eylül 2012 Hikmet Okumuş 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
4/1/2014 3:23:55 PM

çok yararlı tşkler

hikmet okumuş makale yorum
Mustafa Uğuz
6/11/2014 6:57:37 PM

Teşekkürler işime yaradı

hikmet okumuş makale yorum
Ziyaretçi
7/5/2014 3:20:45 PM

iyi yapmıssın güzel yararlı

hikmet okumuş makale yorum
cihan
9/9/2014 11:54:31 PM

merhabalar, çok güzel bir anlatım olmuş, teşekkür ediyorum bilgi paylaşımınızdan dolayı

hikmet okumuş makale yorum
serhat
9/17/2014 1:39:29 PM

teşekkürler

hikmet okumuş makale yorum
Ender
10/22/2014 10:03:43 PM

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ş
10/28/2014 9:09:51 PM

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
11/29/2014 7:50:07 PM

Güzel bir anlatım olmuş, teşekkürler.

hikmet okumuş makale yorum
Emre Pbu
1/29/2015 9:52:48 PM

Çok Teşekkürler

hikmet okumuş makale yorum
Salih Hakan KAYA
10/3/2015 2:11:27 AM

Teşekkür ederim emeğinize sağlık.

hikmet okumuş makale yorum
Bilal Şükür
12/14/2015 3:20:38 PM

süper olmuş hocam elinize sağlık :) muhteşem.. çok işime yaradı...

hikmet okumuş makale yorum
babürhan gürdal
4/10/2016 11:13:12 PM

teşşekkürler ciddi anlamda baya işime yaradı

hikmet okumuş makale yorum
AYSEL
6/7/2016 2:28:37 PM

Emeğinize sağlık, eğitici bir çalışma olmuş cidden.

hikmet okumuş makale yorum
Hilmi Duran
8/3/2016 10:49:25 AM

Detaylı anlatım için teşekkürler...

hikmet okumuş makale yorum
Burak Doğan
9/29/2018 4:20:29 PM

Teşekkürler.



Yorum Ekle