Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Items in ComboBox schreiben (https://www.delphipraxis.net/164343-items-combobox-schreiben.html)

ByTheTime 8. Nov 2011 21:19

Items in ComboBox schreiben
 
Hallo,
In meiner Anwendung gibt es eine Art "Itemmanager", mit dem der Anwender seine eigenen "Inhalte" einfügen kann, um sie nicht immer wieder neu einzutippen. Der soll eigentlich so funktionieren:

In meiner ComboBox gibt es Kategorien: "--- Kategorie 1 ---", "--- Kategorie 2 ---". Im OneExit der ComboBox habe ich eine if-Abfrage rein, die erkennt wenn das angwählte Element eine der Kategorien ist, dann leert sie die ComboBox (nur so zur Info ;)).

Jetzt zu meiner Frage:
Ich habe mir vorgestellt, das es 1 Editfeld und eine ComboBox gibt. Der Anwender schreibt den Itemnamen in das Editfeld und wählt in der ComboBox die Kategorie aus. Aber wie füge ich das Element hinzu? ICh hätte folgendes gemacht:
Delphi-Quellcode:
// Achtung, habe ich nicht getestet, war nur 'ne Überlegung, werde es gleich ausprobieren!
ComboBox1.Items.Add(ComboBox1.Items.IndexOf(ComboBoxKategorie) + 1];
Aber jetzt die Probleme:
1. Was wenn dort schon etwas steht? Wie richte ich am besten eine Schleife ein, die den Vorgang solange wiederholt, bis dort nichts mehr steht?
2. Gibt es auch eine .SaveToFile-Funktion, iwie muss ich die Items ja auch speichern...


Danke

Lukas

Luckie 8. Nov 2011 21:30

AW: Items in ComboBox schreiben
 
Zitat:

Zitat von ByTheTime (Beitrag 1135150)
Delphi-Quellcode:
// Achtung, habe ich nicht getestet, war nur 'ne Überlegung, werde es gleich ausprobieren!

Und warum probierst du es nicht vor dem Beitrag schreiben aus?

Sir Rufo 8. Nov 2011 22:48

AW: Items in ComboBox schreiben
 
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
Delphi-Quellcode:
SetComboBox
und
Delphi-Quellcode:
SetValues
müssen dafür sorgen, dass die ComboBox mit den Werten gefüllt wird.
Die Methode
Delphi-Quellcode:
SetValue
ermittelt den Index des Wertes und setzt den ItemIndex der ComboBox
Delphi-Quellcode:
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;

ByTheTime 10. Nov 2011 21:13

AW: Items in ComboBox schreiben
 
Jop danke, funktioniert... :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:39 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz