Beschreibung:
Eine Erweiterung der System.Windows.Forms.ListBox in der die Items per Maus (Drag&Drop) umsortiert werden können.
Dazu wird eine Linie an der Stelle angezeigt, an der die "gedraggten" Items eingefügt werden.
Ich brauchte so etwas an mehreren Stellen und habe mir daher das Control selber implementiert.
Mögliche Erweiterungen, die noch nicht implementiert sind:
Schlagwörter: ListBox, UserControl, Control
Moin,
habe das Control gerade mal ausprobiert. Beim Drop wird allerdings eine InvalidOperationException ausgelöst. In der foreach-Schleife in der Methode OnDragDrop(). Wenn man die Ausführung fortsetzt klappt der Drag & Drop Vorgang allerdings.
Codezeile 63 in UserSortableListBox.cs
foreach (object item in droppedData)
{
if (Items.IndexOf(item) < insertIndex)
insertIndex--;
Items.Remove(item);
Items.Insert(insertIndex, item);
insertIndex++;
}
Fehlermeldung:
System.InvalidOperationException wurde nicht von Benutzercode behandelt.
Message=Die Liste, an die der Enumerator gebunden ist, wurde geändert. Ein Enumerator kann nur verwendet werden, wenn die Liste nicht geändert wird.
Source=System.Windows.Forms
StackTrace:
bei System.Windows.Forms.ListBox.ItemArray.EntryEnumerator.System.Collections.IEnumerator.MoveNext()
bei UserSortableListBox.UserSortableListBox.OnDragDrop(DragEventArgs drgevent) in C:\Dokumente und Einstellungen\Operator\Eigene Dateien\Visual Studio 2010\Code Snippets\Visual C#\UserSortableListBoxTest\UserSortableListBox\UserSortableListBox.cs:Zeile 73.
bei System.Windows.Forms.Control.System.Windows.Forms.IDropTarget.OnDragDrop(DragEventArgs drgEvent)
bei System.Windows.Forms.DropTarget.System.Windows.Forms.UnsafeNativeMethods.IOleDropTarget.OleDrop(Object pDataObj, Int32 grfKeyState, Int64 pt, Int32& pdwEffect)
InnerException:
Gruß
Cube
Habe die foreach-Schleife durch eine for-Schleife ersetzt
for (int index = 0; index < droppedData.Count; index++)
{
object item = droppedData[index];
if (Items.IndexOf(item) < insertIndex)
insertIndex--;
Items.Remove(item);
Items.Insert(insertIndex, item);
insertIndex++;
}