Herkese selamlar bu gün ki konumuz C# OpenFileDialog kontrolü, bir dialog ekranı ile dosya seçmemize yaramaktadır.   Bu kontrol ile bir OpenFileDialog ekranı açılır ve dosya seçim işlemi gerçekleştirilir.
Openfiledialog kontrolünü ben aşağıdaki kod ile tanımlayacağım bunu Toolbox panelinden de ekleyebilirdim. Ancak ben kod ile yapmayı tercih ettim.

OpenFileDialog DialogEkrani = new OpenFileDialog(); 

ShowDialog metodu ile ekrana açıyoruz.

private void btn_DosyaSec_Click(object sender, EventArgs e)  
{  
    OpenFileDialog DialogEkrani = new OpenFileDialog();  
    DialogEkrani.ShowDialog();  
}  

Aslında bu kodlar ile openfiledialog kontrolünü tanımlamış olduk. Burdan sonra kontrolün özelliklerini (dosya Tipi, açılış klasörü gibi) tanımlayacağız.

Bu kodlar ile dialog ekranı açılacak ve dizindeki bütün dosyalar listelenecektir. Belirli dosyaların listelenmesini istiyorsak “Filter” özelliğini kullanacağız.

private void btn_DosyaSec_Click(object sender, EventArgs e)  
{  
    OpenFileDialog DialogEkrani = new OpenFileDialog();  
    DialogEkrani.Filter = "Pdf Dosyası |*.pdf";  
    DialogEkrani.ShowDialog();  
}  

Burada pdf dosyalarını filtreledik. Dialog ekranı açıldığında filter combobox’ ı içerisinde .pdf uzantısı görünecektir. Eğer birden fazla filter değeri girmiş olsaydık her dafasında en başka .pdf 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 btn_DosyaSec_Click(object sender, EventArgs e)  
{  
    OpenFileDialog DialogEkrani = new OpenFileDialog();  
    DialogEkrani .Filter = "Pdf Dosyası |*.pdf| Word Dosyası|*.docx";  
    DialogEkrani .FilterIndex = 2;  
    DialogEkrani .ShowDialog();  
}  

FilterIndex 2 olarak belirtildiği için ekran açıldığında .docx uzantısı görünecektir.

Dialog her açıldığında aynı dizini göstermek isterseniz InitialDirectory özelliğine yol bilgisini setlememiz gerekecektir.

private void btn_DosyaSec_Click(object sender, EventArgs e)
{
OpenFileDialog DialogEkrani = new OpenFileDialog();
DialogEkrani.InitialDirectory = "C:\\";
DialogEkrani.Filter = "Pdf Dosyası |*.pdf| Word Dosyası|*.docx";
DialogEkrani.FilterIndex = 2;
DialogEkrani.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 btn_DosyaSec_Click(object sender, EventArgs e)  
{  
    OpenFileDialog DialogEkrani = new OpenFileDialog();  
    DialogEkrani.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);  
    DialogEkrani.Filter = "Pdf Dosyası |*.pdf| Word Dosyası|*.docx";  
    DialogEkrani.FilterIndex = 2;  
    DialogEkrani.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 btn_DosyaSec_Click(object sender, EventArgs e)  
{  
    OpenFileDialog DialogEkrani = new OpenFileDialog();  
    DialogEkrani.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);  
    DialogEkrani.Filter = "Pdf Dosyası |*.pdf| Word Dosyası|*.docx";  
    DialogEkrani.FilterIndex = 2;  
    DialogEkrani.RestoreDirectory = true;     
    DialogEkrani.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 ayarlamamız gerekmektedir. Varsayılan olarak True değerini almaktadır.

private void btn_DosyaSec_Click(object sender, EventArgs e)  
{  
    OpenFileDialog DialogEkrani = new OpenFileDialog();  
    DialogEkrani.Filter = "Pdf Dosyası |*.pdf| Word Dosyası|*.docx";  
    DialogEkrani.FilterIndex = 2;  
    DialogEkrani.RestoreDirectory = true;  
    DialogEkrani.CheckFileExists = false;  
    DialogEkrani.ShowDialog();  
}  

Dialog başlığı varsayılan olarak Aç şeklinde görüntülenecektir. Değiştirilmek istenildiğinde Title özelliğini ayarlamak gerekecektir.

private void btn_DosyaSec_Click(object sender, EventArgs e)  
{  
    OpenFileDialog DialogEkrani = new OpenFileDialog();  
    DialogEkrani.Filter = "Pdf Dosyası |*.pdf| Word Dosyası|*.docx";  
    DialogEkrani.FilterIndex = 2;  
    DialogEkrani.RestoreDirectory = true;  
    DialogEkrani.CheckFileExists = false;  
    DialogEkrani.Title = "Belge Seçiniz.";  
    DialogEkrani.ShowDialog();  
}  

Seçilen bir dosyayının yol bilgisi FileName, dosyanın ismi ise SafeFileName özelliği ile öğrenilmektedir.

private void btn_DosyaSec_Click(object sender, EventArgs e)  
{  
    OpenFileDialog DialogEkrani = new OpenFileDialog();  
    //DialogEkrani.Filter = "Pdf Dosyası |*.pdf| Word Dosyası|*.docx";  
    DialogEkrani.FilterIndex = 2;  
    DialogEkrani.RestoreDirectory = true;  
    DialogEkrani.CheckFileExists = false;  
    DialogEkrani.Title = "Belge Seçiniz..";  
    DialogEkrani.ShowDialog();  
  
    string BelgeYolu = DialogEkrani.FileName;  
    string BelgeAdi = DialogEkrani.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 atandığında 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 btn_DosyaSec_Click(object sender, EventArgs e)  
{  
    OpenFileDialog DialogEkrani = new OpenFileDialog();  
    DialogEkrani.Filter = "Pdf Dosyası |*.pdf| Word Dosyası|*.docx";  
    DialogEkrani.FilterIndex = 2;  
    DialogEkrani.RestoreDirectory = true;  
    DialogEkrani.CheckFileExists = false;  
    DialogEkrani.Title = "Belge Seçiniz..";  
  
    if (DialogEkrani.ShowDialog() == DialogResult.OK)  
    {  
        string BelgeYolu = DialogEkrani.FileName;  
        string BelgeAdi = DialogEkrani.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. Burada dikkat etmemiz gereken nokta BelgeYolu’nu artık string[] olarak tanımlıyoruz.

private void btn_DosyaSec_Click(object sender, EventArgs e)
        {
            OpenFileDialog DialogEkrani = new OpenFileDialog();
            DialogEkrani.Filter = "Pdf Dosyası |*.pdf| Word Dosyası|*.docx";
            DialogEkrani.FilterIndex = 2;
            DialogEkrani.RestoreDirectory = true;
            DialogEkrani.CheckFileExists = false;
            DialogEkrani.Title = "Belge Seçiniz..";
            DialogEkrani.Multiselect = true;
            if (DialogEkrani.ShowDialog() == DialogResult.OK)
            {                 
                string[] BelgeYolu = DialogEkrani.FileNames;
                string[] BelgeAdi = DialogEkrani.SafeFileNames;
            }
        }  

Filedialog kontrolümüzü sıfırlamak istersek alttaki kodu yazmamız yeterli olacaktır.

DialogEkrani.Reset();