Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Jaaaaa, for Schleifen sind schon schwer... (https://www.delphipraxis.net/1148-jaaaaa-schleifen-sind-schon-schwer.html)

Daniel B 24. Okt 2002 22:58


Jaaaaa, for Schleifen sind schon schwer...
 
Hallöchen,

mich macht eine einfache Schleife ziemlich fertig.

Code:
procedure TForm1.Button3Click(Sender: TObject);
//Markierten Eintrag löschen
var
  i: integer;
begin
  ListView1.DeleteSelected;
  for i := 0 to ListView1.Items.Count -1 do
  begin
    ListView1.Items.Add;
    ListView1.Items.Item[i].Caption := IntToStr(i);
  end;
end;
So, damit nummeriere ich die Einträge neu. Der erste Eintrag erhält die 0 und der letzte die höchste Nummer. Sollte aber anders rum sein. Also der erste Eintrag die höchste und der letzte die 0.
Wenn ich for i := ListView1.Items.Count -1 to 0 do schreibe, funktioniert das ganze nicht. Es wird nichts neu durchnummeriert.
Was mach ich den falsch? Vielen Dank.

Grüsse, Daniel :hi:

Christian Seehase 25. Okt 2002 00:47

Moin Daniel B,

Warum machst Du davor eigentlich immer ein ListView1.Items.Add?
Damit verdoppelst Du doch die Anzahl der Items.

So sollte es gehen:

Code:
[b]procedure[/b] TForm1.Button3Click(Sender: TObject);
[color=#000080]//Markierten Eintrag löschen[/color]
[b]var[/b]
  i: integer;
  iCount : integer;

[b]begin[/b]
  ListView1.DeleteSelected;
  iCount := ListView1.Items.Count;
  [b]for[/b] i := 0 [b]to[/b] ListView1.Items.Count -1 [b]do[/b]
  [b]begin[/b]
    ListView1.Items.Item[i].Caption := IntToStr(iCount-i);
  [b]end[/b];
[b]end[/b];

Luckie 25. Okt 2002 01:16

iCount könnt ihr euch sparen. Laßt die for-Schleife doch mit downto rückwärts laufen.

Daniel B 25. Okt 2002 04:58

Zitat:

Zitat von Christian Seehase
Warum machst Du davor eigentlich immer ein ListView1.Items.Add? Damit verdoppelst Du doch die Anzahl der Items.

Hallo Christian,

wer sagt den sowas? Ich erstelle dadurch ncihts doppelt. Nur die durchnummerierung fängt oben an anstatt unten. Sonst funktioniert es ja im "prinzip".

GRüsse, Daniel :hi:

Nachtrag: Damit geht es wunderbar. Danke Dir. :bounce2:

Daniel B 25. Okt 2002 05:02

Zitat:

Zitat von Luckie
iCount könnt ihr euch sparen. Laßt die for-Schleife doch mit downto rückwärts laufen.

Hallo Luckie,

das hatte ich bereits versucht. Dennoch ist die 0 oben und die höchste Zahl unten.
Übrigens, wenn ich es damit mache, muss ich wirklich das LV.Items.Add rausschmeissen, sonst werden da leere Einträge éingefügt.

Grüsse, Daniel :hi:

MathiasSimmack 25. Okt 2002 07:33

Zitat:

Zitat von Luckie
iCount könnt ihr euch sparen.

Genau, Christian. Da innerhalb der Schleife ja nur die Umbenennung durchgeführt wird, ist die zusätzliche Variable nicht erforderlich:
Code:
with ListView1,Items do
  for i := 0 to Count - 1 do
    Item[i].Caption := inttostr(Count - i);
bzw.
Code:
    Item[i].Caption := inttostr(pred(Count) - i);
für die Null-basierte Nummerierung.

Zitat:

Zitat von Christian Seehase
Warum machst Du davor eigentlich immer ein ListView1.Items.Add? Damit verdoppelst Du doch die Anzahl der Items.

Zitat:

Zitat von Daniel B
wer sagt den sowas?

Die Delphi-Hilfe zum Thema "Wie füge ich Items in eine ListView ein!"
Zitat:

Ich erstelle dadurch ncihts doppelt.
Auf diese Aussage würde ich mich an deiner Stelle nicht festlegen lassen.
Zitat:

Übrigens, wenn ich es damit mache, muss ich wirklich das LV.Items.Add rausschmeissen, sonst werden da leere Einträge éingefügt.
Gut, dass du´s einsiehst. :)

Udontknow 25. Okt 2002 08:21

Hi!

Du willst die Nummerierung umkehren? Also musst du beim durchgehen der Elemente dem letzten Element den ersten Wert geben, dem vorletzten Element den zweiten Wert usw.

Code:
ListView1.Items.Item[ListView1.Items.Count-1-i].Caption := IntToStr(i);
Cu,
Udontknow

BTW: Add hat bei der Durchnummerierung garantiert nichts zu suchen...

Christian Seehase 25. Okt 2002 09:21

Moin Zusammen,

stimmt natürlich, dass das iCount überflüssig ist.
Dieses "Relikt" stammt noch aus der Version mit .ADD in der Schleife, dann funktionierts nämlich nicht mit Items.Count ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:27 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz