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