AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Jaaaaa, for Schleifen sind schon schwer...
Thema durchsuchen
Ansicht
Themen-Optionen

Jaaaaa, for Schleifen sind schon schwer...

Ein Thema von Daniel B · begonnen am 24. Okt 2002 · letzter Beitrag vom 25. Okt 2002
Antwort Antwort
Daniel B
(Gast)

n/a Beiträge
 
#1

Jaaaaa, for Schleifen sind schon schwer...

  Alt 24. Okt 2002, 22:58
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
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#2
  Alt 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];
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3
  Alt 25. Okt 2002, 01:16
iCount könnt ihr euch sparen. Laßt die for-Schleife doch mit downto rückwärts laufen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Daniel B
(Gast)

n/a Beiträge
 
#4
  Alt 25. Okt 2002, 04:58
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

Nachtrag: Damit geht es wunderbar. Danke Dir.
  Mit Zitat antworten Zitat
Daniel B
(Gast)

n/a Beiträge
 
#5
  Alt 25. Okt 2002, 05:02
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
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#6
  Alt 25. Okt 2002, 07:33
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 von Christian Seehase:
Warum machst Du davor eigentlich immer ein ListView1.Items.Add? Damit verdoppelst Du doch die Anzahl der Items.
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.
  Mit Zitat antworten Zitat
Udontknow

Registriert seit: 17. Jun 2002
223 Beiträge
 
#7
  Alt 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...
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#8
  Alt 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
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:29 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