Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Eintrag in Listview nach unten schieben
rafi@work - Fr 23.07.04 10:35
Titel: Eintrag in Listview nach unten schieben
Hi!
Ich habe in meiner ListView verschiedene Einträge. Mit diesem Code verschiebe ich jeweils den markierten Eintrag um einen Eintrag nach oben.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| procedure TFormIvrHmpConfigTool.ButtonUpClick(Sender: TObject); var i, SourceIndex : Integer; ListItem, SourceItem, DestItem: TListItem; begin SourceIndex := ListViewactiveCodecs.Selected.Index; SourceItem := ListViewactiveCodecs.Items.Item[SourceIndex]; DestItem := ListViewactiveCodecs.Items.Item[SourceIndex-1];
ListViewactiveCodecs.Items.Insert(SourceIndex+1); ListViewactiveCodecs.Items.Item[SourceIndex+1] := DestItem; ListViewactiveCodecs.Items.Item[SourceIndex-1] := SourceItem; ListViewactiveCodecs.Items.Item[SourceIndex].Delete; ButtonUp.Enabled:=false; end; |
Jetzt möchte ich das gleiche machen nur umgekehrt, also einen markierten Eintrag eins nach unten schieben. Wie muss ich denn Code korrekt anpassen? Danke für eure Hilfe!
Grüsse
Delete - Fr 23.07.04 10:37
Wenn du den Source nicht verstehst, probier doch mal was passiert, wenn du die Plus in Minus änderst.
rafi@work - Fr 23.07.04 10:47
Ja, wäre im Prinzip noch logisch, habe ich aber schon vor meiner Frage ausprobiert. Es erscheint aber eine Exception.
Delete - Fr 23.07.04 15:21
Únd welche? Wir sind hier keine Hellseher. :roll:
Bulvaye - Fr 23.07.04 20:07
Hi, ich hab mir für dieses Problem folgende Prozedur geschrieben:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure MoveSelectedItem(ListView: TListView; MoveUp: Boolean); var Item: TListItem; begin with ListView do begin if MoveUp and (Selected.Index > 0) or not MoveUp and (Selected.Index < Pred(Items.Count)) then begin if MoveUp then Item := Items.Insert(Selected.Index-1) else Item := Items.Insert(Selected.Index+2); Item.Assign(Selected); Selected.Delete; Item.Selected := True; Selected.Focused := True; Selected.MakeVisible(False); end; SetFocus; end; end; |
Du definierst einfach eine einzige OnClick-Ereignis-Prozedur, in der Du dann MoveSelectedItem() wie folgt aufrufst:
Quelltext
1:
| MoveSelectedItem(ListViewactiveCodecs, Sender=ButtonUpClick); |
Die Prozedur MoveSelectedItem() hat gegenüber Deiner Methode folgende Vorteile:
a) Es findet eine Bereichsüberprüfung vor der Aktion statt (also keine Fehlermeldungen)
b) Die Selektion und der Focus werden entsprechend mit verschoben.
c) Es wird dafür gesorgt, daß nach dem Verschieben das selektierte Item immer sichtbar ist.
Ich hoffe, das hilft Dir bei Deinem Projekt ein wenig weiter.
Grüße
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!