6 Ekim 2015 Salı

C# Drag And Drop Olayları

C# ta Drag And Drop(Sürükle ve Bırak) Olayları

Bir nesnenin içerisindeki içeriği alıp başka bir nesnenin içerisine taşımaya drag and drop yada sürükle ve bırak denilir. Bir Listbox nesnesi içerisinde sürükle ve bırak olayını gerçekleştirebilmek için AllowDrop özelliğinin true olması gerekmektedir. Aksi takdirde sürükleme ve bırakma olayı gerçekleştirilemez.


Örneğimiz için Form nesnesine iki adet Listbox ekleyelim ve AllowDrop özelliklerini true olarak ayarlayalım.

private void Form1_Load(object sender, EventArgs e)
        {
            byte i;
            for (i = 1; i < 10; i++)
            {
                listBox1.Items.Add(i);
            }
        }

private void listBox1_MouseDown(object sender, MouseEventArgs e)
        {
            if (listBox1.Items.Count == 0)
                return;
            string deger = listBox1.Items[listBox1.IndexFromPoint(e.X, e.Y)].ToString();
            if (DoDragDrop(deger, DragDropEffects.All) == DragDropEffects.All) ;
            listBox1.Items.RemoveAt(listBox1.IndexFromPoint(e.X, e.Y));

        }

private void listBox2_DragDrop(object sender, DragEventArgs e)
        {
            if (e.Data.GetDataPresent(DataFormats.StringFormat))
                listBox2.Items.Add(e.Data.GetData(DataFormats.StringFormat));
        }

private void listBox2_DragOver(object sender, DragEventArgs e)
        {
            e.Effect = DragDropEffects.All;
        }

Olayları ile programımızı tamamlıyoruz.
Taşıma işlemini listbox1’den listbox2’ye doğru yapacağız. Dolayısı ile Listbox içerisindeki bir elemanı seçeceğimiz için listbox1’in mousedown olayını kullanıyoruz.
       
    string deger = listBox1.Items[listBox1.IndexFromPoint(e.X, e.Y)].ToString();

  ...satırı ile Listbox nesnesinin IndexFromPoint metodunu kullanarak belirtilen x,y koordinatlarında listbox nesnesinin hangi index numaralı değeri olduğunun kontrolü yapılarak listbox’ın ilgili elemanı değer adlı değişkene aktarılır.
DragDropEffects metodu taşıma işleminin başlamasını sağlar.
DragDropEffects, taşınacak olan verinin nasıl taşınacağını belirler.
Şu değerleri alır:
·         All: Veri kopyalanır, sürükleme kaynağından silinir ve hedefe bırakılır.
·         Copy: Sürükleme kaynağındaki veri kopyalanarak hedefe bırakılır.
·         Link: Sürükleme kaynağındaki veri, hedef nesneye bağlanır.
·         Move: Sürükleme kaynağındaki veri taşınarak hedefe bırakılır.
·         None: Hedef nesne sürüklenip bırakılan nesneleri kabul etmez
·         Scroll: Hedef nesnede kaydırma yapıldığını bildirir.


if (DoDragDrop(deger, DragDropEffects.All) == DragDropEffects.All)

...satırı ile DoDragDrop metodu vasıtası ile eğer sürükleme işlemi sonucunda taşıma işlemi başlamışsa…

  listBox1.Items.RemoveAt(listBox1.IndexFromPoint(e.X, e.Y));

Listbox nesnesinin X ve Y koordinatlarında listbox nesnesinin hangi index numaralı değeri olduğunun kontrolü yapılarak listbox’ın ilgili elemanı silinir.
Taşınan nesnenin Listbox2’nin üzerine geldiğinde ne gibi işlem yapılacağını, listbox2’nin DragOver metodu ile belirliyoruz.
Son aşamada ise taşınan değeri listbox2 içerisine bırakacağız. Bunun için listbox2’nin DragDrop olayını kullanıyoruz.

if (e.Data.GetDataPresent(DataFormats.StringFormat))
...satırı ile taşınan verinin formatının string bir değer olup olmadığının kontrolünü yaparak…

listBox2.Items.Add(e.Data.GetData(DataFormats.StringFormat));



...satırı ile listbox2 içerisine taşınan string formattaki veriyi aktarıyoruz.





Hiç yorum yok: