- im Beispiel wird zw. 2 Listviews ein String zwischen 2 ListViews per Drag & Drop ausgetauscht
- dabei ist beim Quell-ListView das Ereignis ItemDrag zu behandeln:
private void ListViewSrc_ItemDrag(object sender, ItemDragEventArgs e) { // ListView ermitteln ListView lvListView = sender as ListView; ListViewItem lviItem = null; if (lvListView != null) { // selektiertes Item des Listviews herausfinden, // hier wird nur das erste behandelt (im Falle vom // ListViewSrc.MultiSelect = true muss man die anderen // Items extra abfangen) if (lvListView.SelectedItems.Count == 1) { lviItem = lvListView.SelectedItems[0]; } // wenn ein Item vorhanden if (lviItem != null) { // dann DoDragDrop des ListViews ausführen und den Text kopieren lvListView.DoDragDrop(lviItem.Text, DragDropEffects.Copy); } } }
- beim Ziel-ListView muss die Eigenschaft AllowDrop = True gesetzt sein
- zusätzlich sind die Ereignisse DragOver und DragDrop zu behandeln:
// Was soll passieren, wenn man mit dem Mauszeiger // ein Element auf das Listview zieht? private void ListViewDest_DragOver(object sender, DragEventArgs e) { e.Effect = DragDropEffects.None; // prüfen, ob ein Text vorhanden ist if (e.Data.GetDataPresent(DataFormats.Text)) { e.Effect = DragDropEffects.Copy; } } // wenn das DragDrop-Element "fallen" gelassen wird private void ListViewDest_DragDrop(object sender, DragEventArgs e) { // String abholen string sDataString = e.Data.GetData(DataFormats.StringFormat) as string; bool bFound = false; // nachschauen, ob schon im ListView vorhanden foreach (ListViewItem li in ListViewDest.Items) { if (li.Text == sDataString) { bFound = true; break; } } // wenn nicht vorhanden if (bFound == false) { // dann neues ListViewItem einfügen ListViewDest.Items.Add(sDataString); } }