![]() |
Listview Items mit Checkboxen(!) mit Drag&Drop rearrangi
Hallo,
ich benutze folgenden Code um per Drag and Drop die Items einer ListView zu verschieben. Also zum Beispiel das erste mit dem letzten per Maus auszutauschen:
Delphi-Quellcode:
Das funktioniert auch alles super - so lange die ListView keine Checkboxen enthält. Sobald die Checkboxen aktiviert sind kommt es zu einem "Index Out Of Bounds" Fehler.
//ListView OnDragDrop
procedure TListViewForm.ListView1DragDrop(Sender, Source: TObject; X, Y: Integer) ; var currentItem, nextItem, dragItem, dropItem : TListItem; begin if Sender = Source then begin with TListView(Sender) do begin dropItem := GetItemAt(X, Y) ; currentItem := Selected; while currentItem <> nil do begin nextItem := GetNextItem(currentItem, SdAll, [IsSelected]) ; if Assigned(dropItem) then dragItem := Items.Insert(dropItem.Index) else dragItem := Items.Add; dragItem.Assign(currentItem) ; currentItem.Free; currentItem := nextItem; end; end; end; end; //ListView OnDragOver procedure TListViewForm.ListView1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean) ; begin Accept := Sender = ListView1; end; Ist das ein Bug von Delphi oder müsste der Code irgendwie angepasst werden? Vielen Dank |
Re: Listview Items mit Checkboxen(!) mit Drag&Drop rearr
Hallo,
ich verwende in einer Anwendung von mir haar genau den gleichen Code wie du ihn hast (gelle, auch von den Schweizern oder? :-) ) und hab keine Probleme damit. Ich habe auch eine Listview mit CheckBoxen |
Re: Listview Items mit Checkboxen(!) mit Drag&Drop rearr
Richtig, richtig, der Code taucht auch immer wieder in abgewandelter Form irgendwo auf..
Ich habs jetzt noch einmal getestet in einer ganz neuen Anwendung, aber da funktionierts plötzlich. Anscheinend gibts bei mir im Programm irgendwelche anderen Wechselwirkungen, das wird eine lange Nacht! ;) Edit: Ich habe die Lösung gefunden. Für alle, die es interessiert, weil sie ein ähnliches Problem haben: Ich habe den Click auf die CheckBoxen mit folgendem Ansatz abgefangen: ![]() Das verträgt sich anscheinend nicht mit dem Drag and Drop, da sich dabei offenbar die Items kurzfristig in der ListView ändern - das sieht man auch in dem Moment, wenn die Exception kommt: Das verschiebende Item scheint für einen Moment doppelt zu existieren. Wenn ihr so etwas auch schon mal hattet, könnt ihr ruhig schreiben, wie ihr das Problem gelöst habt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:28 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz