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:
Yorum Gönder