Tech-Ecke / Delphi Inhalt / TComboBox

 

     TComboBox
 

   Grundlegendes

Der Inhalt einer ComboBox ist ein mehrzelliger String, wobei die erste Zeile mit 0 beginnt. Um eine ComboBox mit Einträgen (Items) zu füllen, die später als Auswahl zur Verfügung stehen sollen, geht man im Objektinspektor zu Items und klickt in das dahinterliegende Feld [TStrings], dann auf den erscheinenden Button [...] Vom Programm aus füllt man die Liste mit einem TString oder füllt und löscht mit:

   Auswahl setzen und abfragen

   ComboBox1.ItemIndex := 0; // setzt die Auswahl auf den ersten Eintrag
 
   if ComboBox1.ItemIndex = 0 then // mach irgendwas
 

   Text des aktuellen Eintrages übernehmen ( var S: String; )

   S := ComboBox1.Text;  // Übernimmt den aktuell eingestellten Item-Text in Variable S
 

   Eintrag (Item) hinzufügen und entfernen

   ComboBox1.Items.Add('neuer Eintrag'); // fügt einen Eintrag hinzu 

 ComboBox1.Items.Delete(0); // löscht den ersten Eintag

 

   Kompletter Inhalt in eine TStringlist kopieren und wieder zurück

  var
    SList: TStringList;

SList := TStringList.Create;

//SList.Assign (ComboBox1.Items);
// Inhalt wird gespiegelt, vorhandener Inhalt geht verloren
//SList.AddStrings(self.ComboBox1.Items)
// Inhalt aus ComboBox wird hinzukopiert, vorhandener Inhalt bleibt erhalten

// und wieder zurück


ComboBox1.Items := SList; // Inhalt wird gespiegelt, vorhandener Inhalt geht verloren

SList.Free;
 

   Schreibschutz (nur Auswahl per Drop-Down, keine Benutzereingabe per Tastatur möglich)

         Im Objektinspektor die Option Style auf „csDropDownList“

   Die letzten 8 getätigte Einträge in umgekehrter Reihenfolge merken

Nutzt man eine ComboBox als Eingabefeld und möchte man die letzten Einträge als Legende in die Auswahl schreiben, so kann man den hier gezeigten Code verwenden, der auch gleich die Reihenfolge so zurechtbiegt, dass die zuletzt getätigte Eingabe immer ganz oben steht. Es werden nur Eingaben mitaufgenommen, die nicht schon in der Liste stehen. Nach acht Einträgen wird der jeweils längst zurückliegende aus der Liste gelöscht.

  procedure ComboBoxLegende(ComboBox: TComboBox);
var
   n, Anzahl: Integer;
   Puffer: array [0..7] of String;
   NeuName, ComboTextPuffer: String;
begin
   ComboTextPuffer := ComboBox.Text;
   Anzahl := ComboBox.Items.Count;
   for n := 1 to Anzahl do
   Puffer[n-1] := ComboBox.Items[n-1];
   for n := 1 to Anzahl do ComboBox.Items[n-1] := Puffer[Anzahl -n];
   NeuName := ComboTextPuffer;
   if ComboBox.Items.IndexOf(NeuName) = -1 then
   begin
      if ComboBox.Items.Count = 8 then ComboBox.Items.Delete(0);
      ComboBox.Items.Add(NeuName);
   end;
   Anzahl := ComboBox.Items.Count;
   for n := 1 to Anzahl do Puffer[n-1] := ComboBox.Items[n-1];
   for n := 1 to Anzahl do ComboBox.Items[n-1] := Puffer[Anzahl -n];
   ComboBox.Text := ComboTextPuffer;
end;
 

Aufruf: (muss nach jeder Eingabe aufgerufen werden!)

   ComboBoxLegende(ComboBox1);
 

Die Option Drucken funktioniert erst ab Netscape V4.0 bzw. I-Explorer 5.0 !

[letzte Aktualisierung 09.10.2006]