Welches Event ist das meine, wenn ich die Aufschrift wieder zurückändert auf "Listbox sichern", sobald es wieder etwas zu sichern gibt?
"onChange" scheint es nicht zu geben.
Sichere nicht die Listbox. Die Listbox ist eine Visuelle Komponente zur Gestaltung der
GUI. Und genau dafür sollte man sie auch nehmen.
Ist ist zwar möglich, aber nicht sinnvoll, diese auch zur Datenhaltung zu nehmen.
Besser ist es, die eigentliche Datenhaltung zum Beispiel in eine eigene Klasse auszulagern, und in einer Routine lediglich die Listbox mit Items zur Anzeige zu füllen.
Du kannst dann in deiner Klasse eigene Events erzeugen, die dann wieder die Routine zum Füllen der ListBox anstoßen, aber auch z.B. einen Button enabled.
Delphi-Quellcode:
Type
// Erstmal die Datendefinition als Klasse
TBeispiel=class
private
FName:
string;
FFarbe: TColor;
FAge: Integer;
proceudre SetName(value:
string);
procedure SetFarbe(value: TColor);
procedure SetAge(value: Integer);
published
property Name:
string read FName
write SetName;
property Farbe: TColor
read FFarbe
write SetFarbe;
property Age: Integer
read FAge
write SetAge;
end;
// Und eine generische Liste, zur eigentlichen Datenhaltung.
// TBeispiel und TBeispielList können je nach Umfang natürlich in eine eigene Unit
TBeispielList=class(TObjectList<TBeispiel>)
private
FOnChange: TNotifyEvent;
public
property OnChange: TNotifyEvent
read FOnChange
write FOnChange;
procedure AddData(sName:
string; cFarbe: TColor; iAge: Integer);
end;
//Hier eine Miniform
TForm1=class(TForm)
ListBox: TListBox;
ButtonSpeichern: TButton;
ButtonAdd: TButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure ButtonAddClick(Sender: TObject);
private
BeispielList: TBeispielList;
public
procedure DataToGUID(Sender: TObject);
end;
implementation
//Eine Beispielmethode um Daten in die Liste zu bekommen.
procedure TBeispielList.AddData(sName:
string; cFarbe: TColor; iAge: Integer);
var
b: TBeispiel;
begin
b:=TBeispiel.create;
b.
Name:=sName;
b.Farbe:=cFarbe;
b.Age:=iAge;
self.Add(b);
if Assigned(FOnChange)
then
FOnChange(self);
end;
//Alles anderen verbleibt in der Form
procedure TForm1.FormCreate(Sender: TObject);
begin
BeispielList:=TBeispielList.Create;
BeispielList.OnChange:=DataToGUI;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
BeispielList.free;
end;
proceudre TForm1.DataToGUI(Sender: TObject);
var
i: Integer;
begin
ListBox1.clear;
for i:=0
to BeispielList.count-1
do
ListBox1.Items.Add(BeipielList[i].
Name);
ButtonSpeichern.Enable:=True;
end;
procedure TForm1.ButtonAddClick(Sender: TObject);
begin
BeispielList.AddData('
Das ist ein Name', clRed, 30);
end;
Über den ButtonAdd wird der BeispielList ein Objekt mit den notwendigen Daten hinzugefügt. Die Datenhaltung übernimmt die Klasse TBeispielList.
Beim hinzufügen wird das Event OnChange ausgelößt, welches die Aktualisierung der
GUI anstößt.
Jetzt kannst du beliebige Methoden der Klasse hinzufügen und immer wenn es notwendig ist, das OnChange auslösen.
Alles weitere geschieht dann automatisch.