- 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);
}
}
}