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.