Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Items in ComboBox schreiben

  Alt 8. Nov 2011, 23:48
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;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat