OpenFileDialog ve SaveFileDialog nesneleri FileDialog nesnesinden türetilmiştir. İşlerimizi kolaylaştıracak güzel özellikleri vardır. Burada OpenFileDialog nesnesine göre anlatım yapılacak fakat aynı kurallar SaveFileDialog için de geçerlidir. Bu nesneler
OpenFileDialog dosyaac = new OpenFileDialog();
veya
SaveFileDialog dosyaac = new SaveFileDialog();
yapıcı metot kullanılarak oluşturulur. İçerdiği özellik ve fonksiyonlar şu şekildedir.
dosyaac.AddExtension = true;
//Eğer dosyaadı yazılırken uzantı girilmemişse dosyaadının sonuna otomatik olarak uzantı eklenir.
dosyaac.AutoUpgradeEnabled = true;
//Diyalog penceresi açıkken aktif klasör üzerinde meydana gelen değişiklikler anında güncelleştirilir.
dosyaac.CheckFileExists = true; //Dosya adının elle girilmesi durumunda dosyanın var olup olmadığı kontrol edilir
dosyaac.CheckPathExists = true;
// Dosya adının dosya yolu ile birlikte girilmesi durumunda yolun gerçekten var olup olmadığı kontrol edilir.
dosyaac.DefaultExt = "txt";
// Varsayılan olarak kullanılacak dosya uzantısı belirlenir.
dosyaac.FileName = "yazilimgrubu";
// Diyalog penceresi ilk açıldığında dosya adı kısmında otomatik olarak yazılacak dosya adı. veya dialog penceresi kapandığında kullanıcının seçtiği dosyaadı
dosyaac.FileNames;
// Çoklu dosya seçimlerinde kullanılır. dosya isimleri string türünden bir diziye aktarılır. Örneğin string[] dosyalar = dosyaac.FileNames; gibi
dosyaac.Filter = "Metin Dosyaları|*.txt|Tüm Dosyalar|*.*"; // Dosya türüne göre filtreleme yapmak için kullanılır.
dosyaac.FilterIndex;
// Diyalog penceresinde dosya türü kısmında seçili olan türün indeksi. int türünden bir değişkene aktarılır. Örneğin int index = dosyaac.FilterIndex; gibi
dosyaac.InitialDirectory = "c:\\"; //Diyalog penceresi ilk açıldığın gösterilecek klasörün yolu belirtilir.
dosyaac.Multiselect = true; //Çoklu dosya seçilmesine izin verir.
Stream oku = dosyaac.OpenFile();
//Seçilen dosyayı read-only olarak açar.
dosyaac.ReadOnlyChecked = true; //Diyalog penceresinde salt okunur olarak aç seçeneğinin seçili olup olmadığını denetler.
dosyaac.Reset(); // Yapılan tüm değişiklikleri varsayılan haline getirir.
dosyaac.RestoreDirectory = true; //Diyalog penceresinin uygulama kapanmadan farklı zamanlarda tekrar açılması durumunda aktif klasörün varsayılan klasör mü yoksa en son kullanılan klasör mü olacağını belirler
string dosya = dosyaac.SafeFileName;
//Kullanıcının seçtiği dosyanın ismini sadece dosya adı ve uzantısı olacak şekilde verir. klasör isminide almak istiyorsanız FileName özelliğini kullanmalısınız.
string[] dosyalar = dosyaac.SafeFileNames;
// SafeFileName özelliği ile aynı işi yapar sadece bu özellik çoklu dosya seçimlerinde kullanılır.
dosyaac.ShowDialog(); // Diyalog penceresinin ekranda görüntülenmesini sağlar.
dosyaac.ShowHelp = true;
// Yardım butonunu görüntüler
dosyaac.ShowReadOnly = true; // Salt okunur aç seçeneğinin görüntülenmesini sağlar.
dosyaac.SupportMultiDottedExtensions = true; // Birden fazla uzantısı olan dosyaların izin verir.
dosyaac.Title = "Yazılım Grubu"; // Pencere başlığını düzenler.
dosyaac.ValidateNames = true;
// Diyalog penceresinin geçerli Win32 sistemlerde kullanılan dosya adlarına izin vermesini sağlar.
Kullanım şekli ise şöyle. Yukarda da bahsettiğim gibi diyalog penceresinin ekranda görüntülenmesi için ShowDialog() fonksiyonunu kullanmanız gereklidir. Şimdi bu fonksiyonu kullandık ama kullanıcı "Aç" veya "Kaydet" butonuna mı yoksa "İptal" butonuna mı bastı bunu kontrol etmemiz gerekli. Bunun 4 farklı yolu ben burada hepsini anlatacağım.
1. Yol
ShowDialog() fonksiyonu DialogResult türünden bir değer döndürür. Bu değere bakarak kullanıcının hangi tuşa bastığını anlayabiliriz.
DialogResult dr = dosyaac.ShowDialog();
if (dr == DialogResult.OK)
{
MessageBox.Show(dosyaac.SafeFileName);
}
else if (dr == DialogResult.Cancel)
{
MessageBox.Show("Kullanıcı Kapattı");
}
2. Yol
Bu yöntem yine if kullanacağız fakat DialogResult türünden bir değişken oluşturmayacağız.
if (dosyaac.ShowDialog() == DialogResult.OK)
{
MessageBox.Show(dosyaac.SafeFileName);
}
else
{
MessageBox.Show("Kullanıcı Kapattı");
}
3. Yol
Bu yöntemde de yine DialogResult sorgulaması yapıyoruz. Fakat bu sefer swtich-case yapısını kullanarak
DialogResult dr = dosyaac.ShowDialog();
switch (dr)
{
case System.Windows.Forms.DialogResult.OK:
MessageBox.Show(dosyaac.SafeFileName);
break;
case System.Windows.Forms.DialogResult.Cancel:
MessageBox.Show("Kullanıcı Kapattı");
break;
}
4. Yol
Bu yöntem daha teknik bir yöntemdir ve aynı zamanda kodlarımızın daha düzenli olmasını sağlar. Bunun için OpenFileDialog nesnesinin FileOk event'ını kullanıyoruz. önce event tanımlamamızı yapalım ve ShowDialog fonksiyonunu kullanarak diyalog penceremizi görüntüleyelim. Artık kullanıcı "Aç" veya "Kaydet" butonuna bastığında event içinde tanımlanan dosyaac_FileOk adlı fonksiyondaki komutlar çalışacaktır. Şimdide fonksiyonumuzu oluşturalım.
dosyaac.FileOk += new System.ComponentModel.CancelEventHandler(dosyaac_FileOk);
dosyaac.ShowDialog();
void dosyaac_FileOk(object sender, System.ComponentModel.CancelEventArgs e)
{
MessageBox.Show(dosyaac.FileName);
}
Gördüğünüz gibi birçok kullanım şekli var hepsi de aynı işi yapıyor hangisini seçeceğiniz size bağlı. Benim tavsiyem işlemleriniz uzun olacaksa 4.yolu kısa olacaksa 2.yolu tercih etmenizdir mümkün olduğu kadar switch-case yapısını kullanmamaya çalışın çünkü diğer yöntemler daha hızlı çalışıyor.
Açıklamanız çok iyi olmuş fakat save filedialog daki kaydet butonuna nasıl ulaşabirim yada bu butonu otomatik cliklemenin bir yolu varmı button2.PerformClick(); gibi...
YanıtlaSilBiraz geç bir cevap olacak sanırım ama ShowDialog fonksiyonuyla gösterdikten sonra kullanıcı pencereyi kapatırsa DialogResult türü bir sonuç geri döner. DialogResult.OK ise kaydet butonuna basmıştır. Diğer konu ise madem otomatik kaydettirmek istiyorsunuz SaveDialog penceresine hiç gerek yok doğrudan kaydedebilirsiniz. Mouse olaylarıyla ilgilinmenize, pencerenin ve kaydet butonunun ekrandaki koordinatını elde etmeye çalışmana gerek kalmaz.
YanıtlaSil