Entwickler-Ecke
Sonstiges (Delphi) - ValueListEditor move Problem...
DiamondDog - Mo 22.11.10 13:13
Titel: ValueListEditor move Problem...
Hallo Leute,
ich würde gerne in meinem ValueListEditor Einträge per Buttonklick rauf oder runter verschieben, leider bekomme ich immer den Fehler "Listenindex überschreitet das Maximum". Leider weiß ich nicht genau wo drann das liegen kann, weil meiner Meinung nach der Index nicht überschritten wird.
Hier mal mein Code dazu:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| procedure TForm1.btnAufClick(Sender: TObject); begin if ListEditor1.Row > 1 then begin ListEditor1.Strings.Move(ListEditor1.Row,ListEditor1.Row-1); end; end;
procedure TForm1.btnAbClick(Sender: TObject); begin if ListEditor1.Row < ListEditor1.Strings.Count then begin ListEditor1.Strings.Move(ListEditor1.Row,ListEditor1.Row+1); end; end; |
Danke schon mal an alle fürs Helfen.
Mfg Dog
jaenicke - Mo 22.11.10 13:42
DiamondDog hat folgendes geschrieben : |
Delphi-Quelltext 1: 2: 3: 4: 5:
| procedure TForm1.btnAbClick(Sender: TObject); begin if ListEditor1.Row < ListEditor1.Strings.Count then begin ListEditor1.Strings.Move(ListEditor1.Row,ListEditor1.Row+1); | |
Was passiert wohl beim letzten Eintrag?
DiamondDog - Mo 22.11.10 13:53
Oh man, ich weiß ungefähr was du mir sagen willst. Bekomm das ganze aber nicht so richtig auf die Kette. Also ich muß doch prüfen ob die ausgewählte Zeile, kleiner ist als das Maximum der Liste oder? Wenn die Listenlänge 5 beträgt und Datei 4 ausgewählt ist, sollte ja alles ok sein oder? Aber neben bei das Raufschieben führt auch immer zu einem Listenindex Fehler.
jaenicke - Mo 22.11.10 13:59
DiamondDog hat folgendes geschrieben : |
Also ich muß doch prüfen ob die ausgewählte Zeile, kleiner ist als das Maximum der Liste oder? |
Genau, als das Maximum (Length - 1), nicht kleiner als die Anzahl (Length).
Denn das letzte Element ist auch kleiner als das Length, nämlich genau 1 kleiner...
LSanchez - Mo 22.11.10 14:07
richtig wäre:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| procedure TForm1.btnAufClick(Sender: TObject); begin if ListEditor1.Row > 0 then begin ListEditor1.Strings.Move(ListEditor1.Row,ListEditor1.Row-1); end; end;
procedure TForm1.btnAbClick(Sender: TObject); begin if ListEditor1.Row < (ListEditor1.Strings.Count - 1) then begin ListEditor1.Strings.Move(ListEditor1.Row,ListEditor1.Row+1); end; end; |
Gruß
Luis Sanchez
DiamondDog - Mo 22.11.10 14:14
jaenicke hat folgendes geschrieben : |
DiamondDog hat folgendes geschrieben : | Also ich muß doch prüfen ob die ausgewählte Zeile, kleiner ist als das Maximum der Liste oder? | Genau, als das Maximum (Length - 1), nicht kleiner als die Anzahl (Length).
Denn das letzte Element ist auch kleiner als das Length, nämlich genau 1 kleiner... |
ListEditor1.Row ist doch der ausgewählte Eintrag oder seh ich da was falsch?
LSanchez hat folgendes geschrieben : |
richtig wäre:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| procedure TForm1.btnAufClick(Sender: TObject); begin if ListEditor1.Row > 0 then begin ListEditor1.Strings.Move(ListEditor1.Row,ListEditor1.Row-1); end; end;
procedure TForm1.btnAbClick(Sender: TObject); begin if ListEditor1.Row < (ListEditor1.Strings.Count - 1) then begin ListEditor1.Strings.Move(ListEditor1.Row,ListEditor1.Row+1); end; end; |
Gruß
Luis Sanchez |
Das scheint so aber auch nciht ganz richtig zu seine. Wenn ich zb nur 2 Einträge in der Liste habe und den 2ten nach oben schieben will, bekomme ich ein Listenindex Fehler. Beim Ab Button geht dann ganix mehr der oberste Eintrag läst sich nicht nach unten verschieben.
jaenicke - Mo 22.11.10 14:27
Kann es sein, dass du eine fixed Zeile oben hast? Dann wäre der erste Eintrag Row = 1, aber Strings[0]...
DiamondDog - Mo 22.11.10 14:36
jaenicke hat folgendes geschrieben : |
Kann es sein, dass du eine fixed Zeile oben hast? Dann wäre der erste Eintrag Row = 1, aber Strings[0]... |
Also hab mir mal die Werte ausgeben lassen, wenn ich 2 Einträge in der Liste habe:
Delphi-Quelltext
1: 2: 3:
| ShowMessage(inttostr(ListEditor1.Row)); ShowMessage(inttostr(ListEditor1.Strings.Count - 1)); |
jaenicke - Mo 22.11.10 14:40
Also:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.btnAufClick(Sender: TObject); begin if ListEditor1.Row > 1 then ListEditor1.Strings.Move(ListEditor1.Row - 1,ListEditor1.Row - 2); end;
procedure TForm1.btnAbClick(Sender: TObject); begin if ListEditor1.Row < ListEditor1.Strings.Count then ListEditor1.Strings.Move(ListEditor1.Row - 1,ListEditor1.Row); end; |
DiamondDog - Mo 22.11.10 14:43
jaenicke hat folgendes geschrieben : |
Also: Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.btnAufClick(Sender: TObject); begin if ListEditor1.Row > 1 then ListEditor1.Strings.Move(ListEditor1.Row - 1,ListEditor1.Row - 2); end;
procedure TForm1.btnAbClick(Sender: TObject); begin if ListEditor1.Row < ListEditor1.Strings.Count then ListEditor1.Strings.Move(ListEditor1.Row - 1,ListEditor1.Row); end; | |
Super das funktioniert, ist es auch möglich dem verschobenen Eintrga hinterher zu springen? Auf Deutsch, den Eintrag den ich zb nach oben verschoben habe wieder zu selektieren?
Edit:
Hat sich erledigt habs selbst rausbekommen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| procedure TForm1.btnAufClick(Sender: TObject); begin if ListEditor1.Row > 1 then begin ListEditor1.Strings.Move(ListEditor1.Row - 1,ListEditor1.Row - 2); ListEditor1.Row := ListEditor1.Row-1; end; end;
procedure TForm1.btnAbClick(Sender: TObject); begin if ListEditor1.Row < ListEditor1.Strings.Count then begin ListEditor1.Strings.Move(ListEditor1.Row - 1,ListEditor1.Row); ListEditor1.Row := ListEditor1.Row+1; end; end; |
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!