VB.NET'te Drag Drop Uygulamalari

Yazar: Gürcan Serbest
Kategori: C#.NET & VB.NET
Eklenme Tarihi: 19.5.2007 06:11:33



Bu makalemde sizinle gerçeklestirdigimiz uygulamalarda özellikle baslangiç seviyesi bilgisayar kullanicilari için yazilimlarimizin daha rahat kullanilmasinda önemli bir rol oynadigini düsündügüm Drag & Drop Türkçe adi ile Sürükle & Birak işlemini paylaşmak istiyorum.

Merhabalar

Bu makale’mde sizinle gerçeklestirdigimiz uygulamalarda özellikle baslangiç seviyesi bilgisayar kullanicilari için yazilimlarimizin daha rahat kullanilmasinda önemli bir rol oynadigini düsündügüm Drag & Drop Türkçe adi ile Sürükle & Birak işlemini paylaşmak istiyorum.

Drag & Drop’un ne oldugu hakkında size biraz bahsedecek olursam. Kisaca Drag & Drop yani Sürükle ve Birak’i bir nesne'nin içindeki veriyi alip içerigi uygun baska bir nesneye tasimak olarak özetleyebiliriz.

Drag & Drop olay'inin algoritmasini inceleyecek olursak. Drag & Drop olayini Sekil 1.A’daki gibi gösterebiliriz.



Sekil 1.A

Simdi’de Sekil 1.A’da gösterdigim sema’daki algoritmik yapiyi bir program üzerinde uygulamali olarak göstermeye çalisarak konuyu pekistirelim.

Size bu makalemizde gerçeklestirecegimiz programin özelliklerinden ve islevinden biraz bahsetmek istiyorum. Konuyu daha hizli ve detayli kavrayabilmeniz için programin islevini “Bir süper market’teki meyve reyonunda bulunan meyve çesitlerinden ihtiyacimiz olanlari sepetimize atmak gibi düsünmenizi önemle tavsiye ediyorum.


Formumuza Bir süper market’in meyve reyonunu ve elimizde tasidigimiz alisveris sepetimizi simule etmek için iki adet ListBox kontrol’ü ekliyorum. Simdi ListBox1 kontrolündeki bir objeyi ListBox2 ye sürükleyip birakarak ListBox2 içine aktarilmasini saglayacagiz. Tekrar hikâyesel bazda kurgulayacak olursam. Programimiz araciligiyla reyondan bir meyveyi alip sepetimiz içine birakiyor olacagiz.

Sekil 1. B

Ilk olarak ListBox1’deki bir obje’yi seçebilmek için ListBox1’in MouseDown olayini kullaniyor olacagiz. Yeni baslayan arkadaşlarin konuyu daha iyi anlayabilmesi için örnekleyerek açiklayacak olursam. Reyon’dan ilk meyve’yi alırken seçtigimiz meyve üzerinde uygulayacagimiz işlemi bu kisimda tanimliyor olacagiz.

Private Sub ListBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ListBox1.MouseDown

nokta = New Point(e.X, e.Y)

indis = ListBox1.IndexFromPoint(nokta)

If indis = -1 Then MsgBox("Lütfen 1 içerik seçiniz!")

ListBox1.AllowDrop = True

If e.Button = Windows.Forms.MouseButtons.Left Then

ListBox1.DoDragDrop(ListBox1.Items(indis), DragDropEffects.All)

End Sub

Simdi ListBox1’in MouseDown olayi içine yazdigimiz bu kodlari adim adim inceleyerek açiklayalim.

Öncelikle Point sinifindan bir nesne olusturarak ListBox1 nesnemiz içinde tikladigimiz noktanin koordinat bilgilerini nokta içine aktariyoruz. Bir sonraki adimda ise ListBox1 kontrolümüzün IndexFromPoint metodundan faydalanarak bu koordinatlarda hangi verinin yer aldigini indisini kontrol ederek integer tipli indis degiskenimiz içine atiyoruz.

Bir sonraki adimda kullanicimizin ListBox1 kontrol’ümüz içinde bos bir alani tiklamasini engellemek için bir hata kontrol’ü ve uyarisi olarak kod kümemiz içine

If indis = -1 Then MsgBox("Lütfen 1 içerik seçiniz!")

kodunu ekliyoruz.

Bir sonraki ve benim için en önemli yer olan

ListBox1.AllowDrop = True komutunu ekliyor yada ListBox1 kontrölünün Properties Ekranin’dan AllowDrop seçenegini True olarak seçiyoruzki meyvemizi reyon’dan alip sepetimize atmak için önümüzde bir engel olmasin.

Örnekleyecek olursam AllowDrop özelligimizi reyon’daki meyveler üzerinde bulunan bir kapakli cam olarak düsünebiliriz. Eger değerimiz False ise reyon üzerindeki cam kapali olur ve meyvemizi reyon’dan alamayiz. Meyvelerimizi alip sepetimize atmak için bu cam’in açik yani True olmasi gerekmektedir.

Artik ListBox1 kontrölümüz yani Meyve Reyonu ile isimiz bitti diyebiliriz. Artik point ve indis degiskenlerimiz araciligiyla tuttugumuz obje’mizi ListBox2 kontrölümüz içine tasimaya yani Reyon’dan almis olup elimizde tuttugumuz meyvelerimizi sepetimize birakmaya geldi sira.

Fakat üst’te bahsettigimiz AllowDrop durumu ListBox2 kontrölümüz içinde geçerli Sepetimizin kapakli bir sepet oldugunu ve bu kapagi açmamiz gerektigini düsünelim ve ListBox2.AllowDrop özelligini True yapalim.

Artik sepetemizin kapagi açik ve içine leziz mi leziz meyvelerin atilmasini bekliyor.

Elimizde‘de tuttugumuz meyveleri sepetimize yani degiskenlerimizde tuttugumuz bilgileri ListBox2 kontrölümüz içine birakmak için ListBox2 kontrölümüzün DragOver olayini kullanacagiz.

ListBox2 olayimizin DragOver olayini asagidaki gibi düzenliyoruz.

Private Sub ListBox2_DragOver(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles ListBox2.DragOver

If e.KeyState = 1 Then e.Effect = DragDropEffects.All

End Sub

Burada KeyState parametresi ile mouse ve klavyede o an hangi tusa bastigimizi gözlemliyoruz. KeyState parametresini değer olarak “1” yani Mouse'un sol tusuna basiliyor ise Drop işlemini gerçeklestirmesini sagliyoruz.

Evet yavas yavas sona gelirken son adim olarak. ListBox2 içine objemizi eklemek için

ListBox2.Items.Add(e.Data.GetData(DataFormats.Text))

ve ListBox1’den tasidigimiz veriyi silmek için

ListBox2.Items.Remove(e.Data.GetData(DataFormats.Text))

kod satirlarini ekliyoruz. Artik kasa’ya gidip sepetimiz içindeki ürünleri ödeyip afiyetle yemek kaliyor bizlere.

Sevgili arkadas’lar her güzel sey gibi bu yaziminda sonuna gelmis bulunuyorum. Kisaca sizlere Drag&Drop olayindan bahsetmek istedim. Umarim sizler için egitici ve ögretici bir yazi olmustur. Bir sonraki makalemde görüşmek üzere

Gürcan SERBEST


Gürcan Serbest

17.10.1985 tarihinde Eskişehir ilinde doğan Gürcan SERBEST. Bilgisayar'la 1992 yılında Commodore 64 ile tanıştı. Profesyonel yazılımcılık yaşamına okumuş olduğu Türk Telekom Anadolu Teknik Lisesi Bilgisayar/Yazılım bölümünde başlamıştır. Bir dönem Anadolu Üniversitesi Bilgisayar Klubü Başkan Yardımcılığında bulundu ve Anadolu Üniversitesi Açıköğretim Fakültesi Bilgisayar Destekli Eğitim Biriminde ASP.NET alanında E-Learning konusunda Uygulama Geliştirici olarak görev yapmıştır. 2006 yılında Almanya Hamburg kentindeki Probis Media Solutions?ta LDV kapsamında "Yazılım Mühendisliği alanında güncel uygulamalar" alanında yurtdışı stajını gerçekleştiren Gürcan SERBEST. Porsuk Meslek Yüksek Okulu Bilgisayar Programcılığı bölümünde eğitim eğitim almış ve halen Anadolu Üniversitesi İşletme Fakültesi İşletme bölümünde eğitimini sürdürmektedir. Bir çok ulusal ve uluslararası projede çeşitli pozisyonlarda görev alan Gürcan SERBEST başlıca MSAKADEMIK Üniversiteler Arası .NET Proje Yarışması , BTHab
Bu makaleye ilk yorum yapan siz olun.

Yorumunuz