Grundsätzlich sollte man sich folgendes merken:
Eine
GUI-Komponente ist ein denkbar schlechter Ort zum
Verwalten von Daten.
Diese sollten ausschließlich gemäß ihrer Bestimmung verwendet werden.
Ein Problem hast du ja selber schon angeführt: Wie speichert man das denn jetzt?
Legt man die Verwaltung der Daten so an, dass diese zum Anzeigen ganz toll sind, steht man sich spätestens beim nächsten Schritt (verarbeiten, speichern) schon wieder auf den Füßen.
Also die Daten so speichern, dass die Verarbeitung optimal erfolgen kann.
Für die Funktionen Anzeige und Speichern erstellt man sich einfach Klassen, die das erledigen.
z.B. für das Anzeigen in einer ComboBox
Delphi-Quellcode:
type
TMyDataToComboBox = class( TComponent )
private
fComboBox : TComboBox;
fValues : TMyValueList;
procedure SetComboBox( Value : TComboBox );
procedure SetValues( Value : TMyValueList );
function GetValue : TMyValue;
procedure SetValue( Value : TMyValue );
public
property Value : TMyValue read GetValue write SetValue;
published
property ComboBox : TComboBox read fComboBox write SetComboBox;
property Values : TMyValueList read fValues write SetValues;
end;
Die Methoden
SetComboBox
und
SetValues
müssen dafür sorgen, dass die ComboBox mit den Werten gefüllt wird.
Die Methode
SetValue
ermittelt den Index des Wertes und setzt den ItemIndex der ComboBox
GetValue
macht das eben andersherum und ermittelt über den ItemIndex der ComboBox den zugehörigen Wert und liefert diesen Wert zurück.
Der Lohn der Mühe:
Delphi-Quellcode:
procedure TForm1.Create( AOwner : TComponent );
begin
inherited;
MyDataPresenter := TMyDataToComboBox.Create( Self );
MyDataPresenter.ComboBox := ComboBox1;
MyDataPresenter.Values := MyValues;
MyDataPresenter.Value := MyValue;
end;
und schon sollten alle Werte in der ComboBox stehen und diese auch auf den aktuellen Wert verweisen.
Um die ComboBox jetzt zu aktualisieren reicht dann:
Delphi-Quellcode:
MyValues.Add( MyNewValue );
MyDataPresenter.Values := MyValues;
MyDataPresenter.Value := MyNewValue;