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