Hmm..
Delphi-Quellcode:
rocedure TForm1.ladenClick(Sender: TObject);
var Names:TName;
begin
Names:=TName.create; // Wieso ein NEUES machen..
try
FDatalist.LoadFromFile('e:\test\daten.dat');
Names := FDatalist.Items[0] as TName; // ... Es wird doch aus der Liste geholt und dass NEUE ins Nirvana geschickt..
Edit1.text:=inttostr(Names.ID);
Edit2.Text:=Names.Name;
Edit3.text:=Names.Herkunft;
CheckBox1.Checked:=Names.Geschlecht;
finally
FreeAndNil(Names); // Und hier wird sogar das aus der Liste gleich gekillt
end;
end;
Also gleich richtig machen..
Oben in der Form kannst Du bei
Delphi-Quellcode:
private
{ Private-Deklarationen }
var FDataList:TMyobjectlist;
public
das 'var' löschen...
füge dort noch hinzu
Delphi-Quellcode:
private
{ Private-Deklarationen }
FDataList:TMyobjectlist;
FAktuelerIndex : integer; //<-- Index des aktuellen Satzes
procedure ZeigeDaten;
public
und noch das:
Delphi-Quellcode:
procedure TForm1.ZeigeDaten;
var
Names:TName;
begin
// holen des aktuellen Satzes aus der Liste und Anzeigen
Names := FDatalist.Items[FAktuelerIndex] as TName;
Edit1.text:=inttostr(Names.ID);
Edit2.Text:=Names.Name;
Edit3.text:=Names.Herkunft;
CheckBox1.Checked:=Names.Geschlecht;
end;
dein laden sieht dann so aus:
Delphi-Quellcode:
procedure TForm1.ladenClick(Sender: TObject);
begin
FDatalist.LoadFromFile('e:\test\daten.dat'); // Laden der Liste
FAktuelerIndex := 0; // Auf ersten Datensatz setzen
ZeigeDaten; //Anzeigen
end;
Jetzt nur noch ein Button für Vor:
Delphi-Quellcode:
procedure TForm1.ButtonVorClick(Sender: TObject);
begin
inc(FAktuelerIndex); // Nächster Datensatz
if FAktuelerIndex >= FDatalist.Count then
FAktuelerIndex := 0; // Wieder von vorne beginnen, wenn bereits letzter gewesen
ZeigeDaten;
end;
und eine für Zurück
Delphi-Quellcode:
procedure TForm1.ButtonRueckClick(Sender: TObject);
begin
inc(FAktuelerIndex, -1); // Vorheriger Datensatz
if FAktuelerIndex < 0 then
FAktuelerIndex := FDatalist.Count-1; // Wieder vom letzten beginnen, wenn bereits am Anfang
ZeigeDaten;
end;
Und schon kannst DU durch die Datensätze navigieren...
Jetzt noch dein speichern reparieren:
Delphi-Quellcode:
procedure TForm1.speichernClick(Sender: TObject);
var Names: TName;
begin
Names:=TName.create; // Neues Object erstellen
try
// Daten aus Controls holen
Names.ID:=strtoint(Edit1.text);
Names.Name:=edit2.text;
Names.Herkunft:=Edit3.text;
Names.Geschlecht:=checkBox1.Checked;
FDatalist.Add(Names); // An die Liste Anhängen
FDatalist.SaveToFile('e:\Test\daten.dat'); // Speichern
FAktuelerIndex := FDatalist.Count-1; // Auf den letzten Datensatz setzen
ZeigeDaten; // Könnte man auch sparen, nur zur Sicherheit ;)
finally
// FreeAndNil(Names); // <- NICHT löschen!!! Denn das Object ist ja in der Liste !!!
end;
end;
und noch einen Button für einen Leeren Datensatz
Delphi-Quellcode:
procedure TForm1.ButtonLeerClick(Sender: TObject);
begin
init;
FAktuelerIndex := -1; // Auf nicht Vorhandenen Datensatz setzen
end;
Um den aktuellen Datensatz aus der Liste zu löschen genügt ein weiterer Button:
Delphi-Quellcode:
procedure TForm1.ButtonLoeschenrClick(Sender: TObject);
begin
FDatalist.Delete(FAktuelerIndex); // Aktuellen Datensatz aus Liste löschen
FAktuelerIndex := 0; // Auf ersten Satz setzen
ZeigeDaten;
end;
Was jetzt noch fehlt sind Sicherheitsüberprüfungen beim Laden/ZeigeDaten wenn die Liste leer ist...
Aber etwas musst Du ja auch noch machen....
(Aus dem Kopf ohne Delphi herunter getippt, also keine Garantie auf Fehlerfreiheit
)