![]() |
ListView Eintrage verschieben (alternativ: kopieren)
Hi,
ich habe ein Problem mit der ListView-Komponente: der ViewStyle ist 'vsRecord'. Nun moechte ich die Eintraege manuell sortieren, also 'einen hoch' oder 'einen runter'. Da ich dazu garnichts gefunden habe, hab ich probiert, den gerade ausgewaehlten Eintrag einfach mit AddItem zu kopieren, um dann anschliessend das Original zu loeschen.. In der Theorie klingt das ganz gut, aber leider klappt's nicht so richtig.. :(
Delphi-Quellcode:
wenn ich dann den entsprechenden Button druecke, erhalte ich
selected_item := ListView_Address.Selected;
pos := ListView_Address.Items.IndexOf(selected_item); ListView_Address.Items.AddItem(selected_item, pos); ListView_Address.Items.Delete(pos + 1); 'Access Violation at address 00000000. Read of address 00000000' Das wirft mich als Einsteiger doch so ziemlich aus der Bahn.. :) hat jemand eine Idee? Danke Mat [edit=Daniel B]Delphi-Tags eingefügt. MfG Daniel B.[/edit] |
Hilfe -> TCustomListview -> OnCompare.
Ist sogar mit Code-Beispiel. Zitat:
![]() Genau, einen Beitrag aus der Delphipraxis in der Code-Library. :x |
Moin Mat,
erst einmal herzlich willkommen in der Delphi-PRAXiS. Hier mal ein Beispiel, wie Du eine Zeile mit Hilfe eines Buttons nach oben verschieben kannst.
Delphi-Quellcode:
procedure TfrmMAIN.Button1Click(Sender: TObject);
var liTo : TListItem; begin // Ist keiner oder der oberste Eintrag ausgewählt gibt's nichts zu tun if ListView1.Selected = nil then exit; if ListView1.Selected.Index = 0 then exit; // Eine neue Zeile über der markierten einfügen liTo := ListView1.Items.Insert(ListView1.Selected.Index-1); // die gewählte Zeile dort hinkopieren liTo.Assign(ListView1.Selected); // und dann löschen ListView1.Items.Delete(ListView1.Selected.Index); end; |
Danke Chris, So funktionierts!!
@Luckie ich wusste garnicht, das mein Rechner so offen ist, dass du mir bei der arbeit zuschauen kannst. ich habe sehrwohl bei google, in der hilfe und hier im forum gesucht.. allerdings nicht nach 'listview sortieren', da ich ja nicht sortieren, sondern verschieben sollte. Das Beispiel bei TCustomListView habe ich nicht gefunden, aber das zeigt ja auch das Veraendern von Spalten. Wo wir also schon bei kindischen Anschuldigungen sind, du hast meinen Post nicht richtig gelesen! :) Mat |
Ok, dann haben wir uns mißverstandenund ich muß mich entschuldiegen.
Aber das habe ich unter "manuellen sortieren" verstanden, da man ja auch im Objekt-Inspektort die Sortierung voreinstellen kann. Hättest du geschrieben: "Wie kann ich einen Listviewitem per Button-Klick nach oben oder unten verschieben?" Dann wäre deutlicher geworde, was du meinst bzw. willst. |
aber chris hat mich verstanden! :D ok, ok war nur spass
is ja quatsch zu streiten, danke trotzdem fuer die hilfe vielleicht schieb ich nochmal ne frage zur automatischen sortierung ein: neben meinem listview gibt's drei knoepfe. einen zum hochschieben, einem zum runterschieben und einen zum komplett automatischen sortieren (steht sinnvollerweise 'abc' drauf :) ) zum sortieren benutze ich einfach Listview1.SortStyle := (wie auch immer da automatisch heisst :) ) womit ja auch bestehende Eintrage sortiert werden und danach setz ich den SortStyle einfach wieder auf manuell, wobei ja die bestehenden Eintraege nicht mehr veraendert werden, aber alle neuen Eintraege wieder hintenrangehangen werden. Mir funktioniert das, aber irgendwie scheint das zu einfach... kann man das so lassen, oder gibt's elegantere Moeglichkeiten Danke Mat |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:56 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