Autor Beitrag
DiamondDog
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 460



BeitragVerfasst: Mo 22.11.10 13:13 
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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 22.11.10 13:42 
user profile iconDiamondDog hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 460



BeitragVerfasst: Mo 22.11.10 13:53 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconDiamondDog hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden 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?

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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 22.11.10 13:59 
user profile iconDiamondDog hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26
Erhaltene Danke: 8



BeitragVerfasst: Mo 22.11.10 14:07 
richtig wäre:

ausblenden 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 - 1then
  begin
    ListEditor1.Strings.Move(ListEditor1.Row,ListEditor1.Row+1);
  end;
end;


Gruß

Luis Sanchez
DiamondDog Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 460



BeitragVerfasst: Mo 22.11.10 14:14 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconDiamondDog hat folgendes geschrieben Zum zitierten Posting springen:
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?


user profile iconLSanchez hat folgendes geschrieben Zum zitierten Posting springen:
richtig wäre:

ausblenden 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 - 1then
  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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 460



BeitragVerfasst: Mo 22.11.10 14:36 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
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:
ausblenden Delphi-Quelltext
1:
2:
3:
ShowMessage(inttostr(ListEditor1.Row)); // Beim ersten Eintrag = 1 beim Zweiten = 2

ShowMessage(inttostr(ListEditor1.Strings.Count - 1)); //Gibt 1 aus
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 22.11.10 14:40 
Also:
ausblenden 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;

Für diesen Beitrag haben gedankt: DiamondDog
DiamondDog Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 460



BeitragVerfasst: Mo 22.11.10 14:43 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Also:
ausblenden 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:
ausblenden 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;