- im Beispiel wird zw. 2 Listviews ein Listitem 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 das Item kopieren lvListView.DoDragDrop(lviItem, 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; // wenn das Element ein ListViewItem ist ListViewItem lviItem = e.Data.GetData(typeof(ListViewItem)) as ListViewItem; if (lviItem != null) { // dann eine Kopie davon erlauben e.Effect = DragDropEffects.Copy; } } // wenn das DragDrop-Element "fallen" gelassen wird private void ListViewDest_DragDrop(object sender, DragEventArgs e) { ListViewItem lviItem = e.Data.GetData(typeof(ListViewItem)) as ListViewItem; // wenn das Element ein ListViewItem ist if (lviItem != null) { bool bFound = false; // prüfen, ob schon in der Liste von ListViewDest foreach (ListViewItem li in ListViewDest.Items) { if (li.Text == lviItem.Text) { bFound = true; break; } } // wenn noch nicht in ListViewDest, dann einfügen if (bFound == false) { ListViewDest.Items.Add(lviItem.Text); } } }