Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Listbox-Einträge verschieben
boebel - Mi 28.03.07 11:59
Titel: Listbox-Einträge verschieben
Hallo Leute
Ich habe eine Listbox mit mehreren Einträgen. Mit zwei Buttons kann ein markierter Eintrag nach oben bzw. nach unten geschoben werden. Soweit so gut. Nur leider muss der Eintrag nach dem Klicken auf den Button wieder markiert werden.
Also ziemlich mühsam wenn ein Eintrag einige Zeilen nach oben geschoben werden soll.
Kann mir jemand einen Tipp geben wie ich das hinkriege ohne immer wieder markieren zu müssen?
Vielen Dank
Gruss Michael
IngoD7 - Mi 28.03.07 12:32
Delphi-Quelltext
1:
| ListBox.ItemIndex := IndexDesZuMarkierendenEintrags; |
Jakob Schöttl - Mi 28.03.07 13:30
IngoD7 hat folgendes geschrieben: |
Delphi-Quelltext 1:
| ListBox.ItemIndex := IndexDesZuMarkierendenEintrags; | |
oder beim rauf ^:
ListBox.ItemIndex := Inc(ListBox.ItemIndex);und beim runter v:
ListBox.ItemIndex := Pred(ListBox.ItemIndex);EDIT: Ach nein, du musst davor noch eine Prüfung machen, dass der
ItemIndex nicht
(Count -1) über- bzw.
0 unterschreitet.
DrRzf - Fr 30.03.07 01:16
Ich hab in einem programm sowas in ähnlicher Form drinnen.
2 Buttons mit Up Down und man kann damit die einträge in der Liste nach markieren eines eintrages rauf und runter schieben.
Allerdings werden hier nicht die Zeilen im StringGrid verschoben, sondern zahlen in einem Array, Die Daten aus dem Array werden danach wieder mit SetSchussreihenfolgeToEditor(AktSR); in das Stringgrid geschrieben. (hierbei werden aber dann daten aus einem anderen Array(record) angezeigt.
hier die 2 routinen der Buttons
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29:
| procedure TForm1.BtnSRDownClick(Sender: TObject); var puf,pos : integer; begin pos := ListBoxSeSR.ItemIndex; if pos = -1 then Exit; if pos = AnzSchiffe - 1 then Exit; pos := pos + 1; puf := AktSr[pos]; AktSR[pos] := AktSR[pos + 1]; AktSR[pos + 1] := puf; SetSchussreihenfolgeToEditor(AktSR); ListBoxSeSR.ItemIndex := pos; end;
procedure TForm1.BtnSRUpClick(Sender: TObject); var puf,pos : integer; begin pos := ListBoxSeSR.ItemIndex; if pos = -1 then Exit; if pos < 1 then Exit; pos := pos + 1; puf := AktSr[pos]; AktSR[pos] := AktSR[pos - 1]; AktSR[pos - 1] := puf; SetSchussreihenfolgeToEditor(AktSR); ListboxSeSr.ItemIndex := pos - 2; end; |
IngoD7 - Fr 30.03.07 08:59
Jakob Schöttl hat folgendes geschrieben: |
oder beim rauf ^: ListBox.ItemIndex := Inc(ListBox.ItemIndex);
und beim runter v: ListBox.ItemIndex := Pred(ListBox.ItemIndex);
|
Eher dann doch so: :)
Delphi-Quelltext
1: 2:
| ListBox.ItemIndex := Pred(ListBox.ItemIndex); ListBox.ItemIndex := Succ(ListBox.ItemIndex); |
Lannes - Fr 30.03.07 09:28
Hallo,
verschiebt man die Items mit der richtigen Prozedur muss nicht neu markiert werden,
Move nimmt die Markierung mit:
Delphi-Quelltext
1: 2: 3:
| with ListBox do if ItemIndex > 0 then Items.Move(Pred(ItemIndex),ItemIndex); |
IngoD7 - Fr 30.03.07 10:38
Lannes hat folgendes geschrieben: |
Move nimmt die Markierung mit:
|
Sagen wir lieber: Es lässt die Markierung stehen. ;)
Denn genau genommen verschiebst du (mit der von dir gewählten Reihenfolge der Argumente von Move) nicht den selektierten Eintrag, sondern den "Zieleintrag". Anders herum wäre die Markierung weg. So wandert sie scheinbar mit.
Letztlich ist es so aber tatsächlich am besten gelöst.
Lannes - Fr 30.03.07 12:14
Hallo,
da siehst Du wohl richtig, ist auch schon etwas älter der Code-Schnipsel.
Das kommt davon, Copy & Paste und nicht überlegen was da abläuft :angel:
Jakob Schöttl - Fr 30.03.07 12:28
IngoD7 hat folgendes geschrieben: |
Jakob Schöttl hat folgendes geschrieben: |
oder beim rauf ^: ListBox.ItemIndex := Inc(ListBox.ItemIndex);
und beim runter v: ListBox.ItemIndex := Pred(ListBox.ItemIndex);
|
Eher dann doch so: :)
Delphi-Quelltext 1: 2:
| ListBox.ItemIndex := Pred(ListBox.ItemIndex); ListBox.ItemIndex := Succ(ListBox.ItemIndex); | |
ups :oops: , Genau das meinte ich natürlich - nur benutz ich diese Prozeduren und Funktionen selten, deswegen hab ichs verwechselt...
boebel - Mo 02.04.07 15:29
Obowohl ich mir nicht sicher bin behaupte ich mal dass Move die sinnvollste Lösung für mein Problem ist.
Vielen Dank für eure Tipps.
gruss Michael
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 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!