Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Mengenvariable aus Combobox setzen.


Wolff68 - Mi 17.07.02 20:28
Titel: Mengenvariable aus Combobox setzen.
Ich habe eine Variable eines Mengentyps. Nun möchte ich gerne diese Variable aus einer Combobox heraus setzen. Wie mach ich das am einfachsten?

Hier mal der Code.
Die Strings in der ModeBox heisen natürlich auch Rot, Gruen,... wobei es auch nett wäre diese Einträge aus der Menge heraus zu füllen.

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
type
  TMode = (Rot, Gruen, Blau, Gelb, Weiss, Schwarz);
  TForm1 = class(TForm)
    ModeBox: TComboBox;
    procedure ModeBoxChange(Sender: TObject);
    ...
  public
    Mode : TMode;
  end;  

var
  Form1: TForm1;

implementation

procedure TForm1.ModeBoxChange(Sender: TObject);
begin
  // hier soll nun je nach Auswahl der Wert von Mode geändert werden
end;

end.

Eventuell bin ich auch total auf dem Holzweg und es gibt eine viel einfachere Lösung. Ich will das ganze später vielleicht mal in eine Komponente einbauen, wobei Mode dann eine Eigenschaft werden soll.

Ich hab diese Art der Menge übrigends aus einer Komponente. Kenn mich aber mit Mengen selber nicht so gut aus :oops:
Kommt nämlich gleich die nächste Frage, wie ich den Wert von Mode in einer If oder Case verwende... :oops: :oops:


DaSurv - Do 18.07.02 03:49

Ich hab´s nicht ganz verstanden, aber ich biete dir halt mal einen Alternativvorschlag:

Ich habe Die Farben vorher als Items in die ComboBox eingetragen und habe Farbe zu einer Eigenschaft von deiner Klasse TMode gemacht.
(Du kannst ja später die vordefinierten Farben aus einer Datei, zum Beispiel farben.ini in die ComboBox einlesen!). Also nun meine Vorstellung:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
type
  TMode = class
    Farbe: String;

...

var
  Form1: TForm1;
  Mode: TMode;

...

procedure TForm1.ModeBoxChange(Sender: TObject);
begin
  Mode := TMode.Create;
  Mode.Farbe := ModeBox.Text;
end;

P.S. Wenn du nicht willst, dass der Benutzer selber Werte in die ComboBox eintragen kann, dann kannst du ja die Eigenschaft Style, der ComboBox auf csDropDownList setzen!!!

DaSurv

Code-Tags hinzugefügt. Tino


Klabautermann - Do 18.07.02 09:18

Hallo,

1. Ich sehe in deinem Code keinen Mengentyp, daher gehe ich davon aus, du meinst den Aufzählungstyp tMode.

2. Besonders einfach wird das dann, wenn du sicherstellen kannst, das die Reihenfolge und Anzahl, in der Liste der Combobox, die selbe ist wie im Typen. Dann kannst du das nämlich so machen:

Quelltext
1:
2:
3:
4:
5:
procedure TForm1.ModeBoxChange(Sender: TObject);
begin
  IF ModeBox.ItemIndex > -1 THEN
    Mode := tMode(ModeBox.ItemIndex);
end;


Gruß
Klabautermann