Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#28

Re: alles deaktivieren (neuse Problem)

  Alt 29. Okt 2003, 09:59
War schon klar, das nichts gespeichert wurde.
Delphi-Quellcode:
List.SaveToFile('test');
For a := 1 to 3 do
  List.Add((FindComponent('edit' + IntToStr(a)) as TEdit).Text);
List wurde erst in der Datei gespeichert und dann mit Daten gefüllt.


Ausserdem hast du List entweder überhaupt nicht erstellt oder so oft wie du auf Button1 und/oder Button2 gedrückt hast.List := TStringList.Create; Und am Ende, ohne Abfrage ob es existiert, 1-mal freigegeben.List.Free; Und dann noch ein kleiner Fehler beim einlesen.
Wenn man diesen Code mal etwas optimiert, sieht man das immer nur der 3. List-Eintrag den Editfeldern zugewiesen wird.
Delphi-Quellcode:
For a := 1 to 3 do
  For b := 0 to 2 do
    (FindComponent('edit' + IntToStr(a)) as TEdit).Text := List.Strings[b];

For a := 1 to 3 do {v}
  (FindComponent('edit' + IntToStr(a)) as TEdit).Text := List.Strings[2];
Hab das unten mit abgeändert.
Delphi-Quellcode:
For a := 1 to 3 do {  v  }
  (FindComponent('edit' + IntToStr(a)) as TEdit).Text := List.Strings[a - 1];
Hier hatte sich auch die Fehlermeldung "maximum (0)" versteckt. (List war leer und Index 0 bis 2 wurde eingelesen)



So müsste es geh'n:
Delphi-Quellcode:
Unit Unit1;

Interface
  Uses Windows, Messages, SysUtils, Variants, Classes, Graphics,
    Controls, Forms, Dialogs, StdCtrls;

  Type TForm1 = Class(TForm)
      Button1: TButton;
      Edit1: TEdit;
      Edit2: TEdit;
      Edit3: TEdit;
      Button2: TButton;
      Procedure FormCreate(Sender: TObject);
      Procedure FormDestroy(Sender: TObject);
      Procedure Button1Click(Sender: TObject);
      Procedure Button2Click(Sender: TObject);
    End;

  Var Form1: TForm1;
    List: TStringList;

Implementation
  {$R *.dfm} 

  Procedure TForm1.TForm1.FormCreate(Sender: TObject);
    Begin
      List := TStringList.Create;
    End;

  Procedure TForm1.FormDestroy(Sender: TObject);
    Begin
      List.Free;
    End;

  Procedure TForm1.Button1Click(Sender: TObject);
    Var a: Integer;

    Begin
      List.Clear;
      For a := 1 to 3 do
        List.Add((FindComponent('edit' + IntToStr(a)) as TEdit).Text);
      List.SaveToFile ('test');
    End;

  Procedure TForm1.Button2Click(Sender: TObject);
    Var a: Integer;

    Begin
      List.LoadFromFile('test');
      For a := 1 to 3 do
        (FindComponent('edit' + IntToStr(a)) as TEdit).Text := List.Strings[a - 1];
    End;

End.
-List wird beim erstellen der Formulars erzeugt und beim löschen des Forms wieder freigegeben.
-Da List global definiert ist und daher schon etwas enthalten kann, sollte dessen Inhalt vorm einlesen löschen. (List.Clear

Da List aber immer nur Lokal verwendet wird, kann man es auch Lokal definieren:
Delphi-Quellcode:
Unit Unit1;

Interface
  Uses Windows, Messages, SysUtils, Variants, Classes, Graphics,
    Controls, Forms, Dialogs, StdCtrls;

  Type TForm1 = Class(TForm)
      Button1: TButton;
      Edit1: TEdit;
      Edit2: TEdit;
      Edit3: TEdit;
      Button2: TButton;
      Procedure Button1Click(Sender: TObject);
      Procedure Button2Click(Sender: TObject);
    End;

  Var Form1: TForm1;

Implementation
  {$R *.dfm} 

  Procedure TForm1.Button1Click(Sender: TObject);
    Var List: TStringList;
      a: Integer;

    Begin
      List := TStringList.Create;
      For a := 1 to 3 do
        List.Add((FindComponent('edit' + IntToStr(a)) as TEdit).Text);
      List.SaveToFile ('test');
      List.Free;
    End;

  Procedure TForm1.Button2Click(Sender: TObject);
    Var List: TStringList;
      a: Integer;

    Begin
      List := TStringList.Create;
      List.LoadFromFile('test');
      For a := 1 to 3 do
        (FindComponent('edit' + IntToStr(a)) as TEdit).Text := List.Strings[a - 1];
      List.Free;
    End;

End.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat