Omogućava korisniku da prenese tekst sliku ili drugi objekat iz jedne kontrole u drugu (povuci i spusti). Ova funkcionalnost je slična Copy - Paste funkcionalnosti. Drag and Drop funkcija se ostvaruje korišćenjem odgovarajućih događaja za izvornu i odredišnu kontrolu.
MouseDown događaj se trigeruje kada je miš kliknut iznad izvorišne kontrole. U metodi koja hendluje ovaj događaj poziva se metoda DoDragDrop. GiveFeedBack događaj omogućava korisniku da definiše izgled pokazivača miša. QueryContinueDrag događaj omogućava da se poništi ili nastavi Drag and Drop operacija.
DragEnter događaj se dešava kada se objekat koji se prevlači prenese unutar granica odredišne kontrole. Event handler DragEnter događaja dobija objekat DragEventArgs. DragOver događaj se dešava kada se objekat prevuče iznad odredišne kontrole. Event hendleru DragOver događaja se prosleđuje DragEventArgs objekat. DragDrop događaj se dešava kada se taster miša otpusti iznad odredišne kontrole. Event hendleru DragDrop događaja se prosleđuje DragEventArgs objekat. DragLeave se dešava kada se objekat vuče izvan granica odredišne kontrole.
Unutar MouseDown event hendlera izvorišne kontrole poziva se DoDragDrop metoda. DoDragDrop kopira željene podatke u DataObject objekat i podešava flegove koji definišu šta se može uraditi sa tim podacima. Zatim se generišu događaji GiveFeedBack i QueryContinueDrag. Pointer miša se prevlači iznad odredišne kontrole i generiše se DragEnter događaj. Za odredišnu kontrolu potrebno je podesiti svojstvo AllowDrop na vrednost True. Event handler prima objekat DragEventArgs i on služi da se odredi da li su podaci koji se prevlače pogodni za odredišnu kontrolu. Korisnik otpušta taster miša i generiše DragDrop događaj.
Unutar metode DoDragDrop moraju se specificirati efekti prevlačenja. Ovi efekti su instance DragDropEffects enumeracije. Vrednosti enumeracije su:
U primeru na slici želimo da omogućim prevlačenje teksta iz jedne u drugu TextBox kontrolu. Generiše se MouseDown događaj izvorišne kontrole. Za odredišnu kontrolu postavlja se svojstvo AllowDrop na vrednost true.
private void textBox1_MouseDown(object sender, MouseEventArgs e)
{
textBox1.DoDragDrop(textBox1.Text, DragDropEffects.Move | DragDropEffects.Copy);
}
private void textBox2_DragEnter(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.Text)) { e.Effect = DragDropEffects.Copy; } } |
Unutar MouseDows event handlera za kontrolu TextBox1 poziva se metoda DoDragDrop čime se započinje operacija Drag and Drop. Primenjuju se efekti Move i Copy.Podaci se kopiraju unutar objekta tip DataObject. Unutar DragEnter događaja TextBox2 kontrole ispituje se da li su podaci pogodni za ovu kontrolu
korišćenjem metode GetDataPresent i ukoliko jesu definiše se efekat "Drag and Drop" operacije za odredišnu kontrolu.
private void textBox2_DragDrop(object sender, DragEventArgs e)
{
textBox2.Text = (string)e.Data.GetData(DataFormats.Text);
}
Unutar DragDrop događaja vrši se kopiranje podataka u odredišnu kontrolu korišćenjem metode GetData objekta DataObject.