| Autor |
Beitrag |
boebel
      
Beiträge: 16
Delphi 7, Microsoft Visual C# 2010
|
Verfasst: Mi 28.03.07 11:59
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
      
Beiträge: 629
D7
|
Verfasst: Mi 28.03.07 12:32
Delphi-Quelltext 1:
| ListBox.ItemIndex := IndexDesZuMarkierendenEintrags; |
|
|
Jakob Schöttl
      
Beiträge: 929
Erhaltene Danke: 1
Delphi 7 Professional
|
Verfasst: 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
      
Beiträge: 260
Win XP Prof
D7 Enterprise
|
Verfasst: 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; |
_________________ rein statistisch gesehen darf man keiner statistik trauen die man nicht selbst gefälscht hat.
|
|
IngoD7
      
Beiträge: 629
D7
|
Verfasst: Fr 30.03.07 08:59
|
|
Lannes
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: 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); |
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
IngoD7
      
Beiträge: 629
D7
|
Verfasst: 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
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: 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 
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
Jakob Schöttl
      
Beiträge: 929
Erhaltene Danke: 1
Delphi 7 Professional
|
Verfasst: Fr 30.03.07 12:28
|
|
boebel 
      
Beiträge: 16
Delphi 7, Microsoft Visual C# 2010
|
Verfasst: 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
|
|