Birçok programda bu özellik mevcuttur, herkesin kullandığı MSN programında bile arkadaşlarımıza dosya göndereceğimiz zaman yazı yazdığımız yere dosyayı sürükleyip bırakırız. Peki biz bunu kendi programımıza nasıl ekleyeceğiz? Mesela formumuzda bir ‘TextBox’ olsa kullanıcı metin dosyasını ‘TextBox’a sürükleyip bıraktığında içindeki yazıları ‘TextBox’da göstersek, ya da en güzeli ana formumuza istediği dosyayı bıraksın biz belirleyelim nerede gözükeceğini :), resim ise ‘PictureBox’da metin dosyası ise ‘TextBox’da, excel dosyası ise ‘DataGrid’de vb. Nasıl olur? (En sonuncusu bence en güzeliydi).
Ilk olarak yapmamız gereken sürükle-bırak özelliğini kullanacağımız kontrol’ün ‘AllowDrop’ özelliğini ‘true’ yapmamız lazım. Bunu yaptığımız zaman kontrolün üzerine bir dosya sürüklediğimizde dosyanın bırakılabileceği anlamına gelen simgeye dönüşecek fare imleçimiz. (Not: ‘AllowDrop’ özelliği bazı kontrollerde mevcut değil. PictureBox, GroupBox vb.) Bu işlemi yaptıktan sonra sıra dosyayı bıraktıktan sonraki işlemleri yapmak kaldı. Bunun için kontrollerin iki tane ‘Event’i mevcut; ‘DragDrop’: Dosya bırakıldıktan sonra tetiklenen fonksiyon. ‘DragEnter’: Dosya bırakılmadan kontrolün üzerindeyken tetiklenen fonksiyon.
private void TextBox1_DragEnter(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.FileDrop, false) == true) e.Effect = DragDropEffects.All; } private void TextBox1_DragDrop(object sender, DragEventArgs e) { string[] dosyalar = (string[])e.Data.GetData(DataFormats.FileDrop); EepromDosyaYolu = dosyalar[0]; if ((dosyalar[0].EndsWith(".txt") == true) || (dosyalar[0].EndsWith(".TXT") == true) || (dosyalar[0].EndsWith(".rtf") == true) || (dosyalar[0].EndsWith(".RTF") == true) ) { dosyaIsim_tb.Text = dosyalar[0].Remove(0, dosyalar[0].LastIndexOf("\\") + 1); } else { EepromDosyaYolu = ""; MessageBox.Show("Yanlış Format, "www.burakozkan.net", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } } |
‘DragEnter’ ‘Event’inde dosya bırakıldı mı diye kontrol ediliyor eğer dosya bırakıldıysa, kontrolün ‘DragDrop’ ‘Event’i yapılıyor, burada yapılan işlemler, ben bütün bırakılan dosyalarla işlem yapmak istemediğim için sadece ilk dosyanın ismini aldım, eğer siz uygulamanızda birden fazla dosya bırakıldığı zaman hepsini kullanmak istiyorsanız ‘dosyalar’ isimli ‘string’ dizisini kullanabilirsiniz. Dosyanın ismini aldıktan sonra uzantısına baktım eğer metin dosyası formatlarından bir tanesi ise dosya ismini bir ‘TextBox’a yazdırdım, dosyayı okumak için FileStream sınıfı ile okuyup yazdırabilirsiniz. Gelelim son dediğimizi yapmaya; bu işlem için kod yazmayacağım zaten yukarıdaki koddan farklı birşey yapmayacaksınız. Sadece bunu ana formunuza uygulayacaksınız ve ‘DragDrop’ ‘Event’inde dosya formatına göre ayırarak ister bir ‘PictureBox’da gösterebileceksiniz, isterseniz ‘TextBox’da isterseniz ‘DataGrid’de tercih size kalmış. Hatta çoklu dosya bırakıldıysa bunları bir ‘ListBox’da gösterebilirsiniz.
Bir ayın konusunun daha sonuna geldik, umarım sizlere faydalı olur. Hepinize kolay gelsin, Iyi çalışamalar…
Son Yorumlar