Einzelnen Beitrag anzeigen

BadenPower

Registriert seit: 17. Jun 2009
616 Beiträge
 
#25

AW: Auswahl eines ComboBox-Elements per ENTER/durch das System

  Alt 10. Jun 2015, 11:33
Auch ich habe mir den Source angeschaut, allerdings mit Lazarus.

Dabei habe ich festgestellt, dass die Property .ItemIndex im OnChange-Ereignis hinterherhinkt, wenn man zum Beispiel den Letzten Buchstaben eines Eintrages im Eingabefeld löscht.

Auch bei anderen Events ist ein "Fehlverhalten" zu entdecken.

Folgende Lösung funktioniert im OnChange (und in den anderen Events):

Im OI die Property AutoComplete der ComboBox auf "false" setzen.

Im OnChange-Ereignis nicht die Property ItemIndex verwenden, sondern den ItemIndex, welcher zum Text passt, selbst ermitteln.
Delphi-Quellcode:
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
  case ComboBox1.Items.IndexOf(ComboBox1.Text) of

    14: begin
         ComboBox3.Items.Clear;
         ComboBox3.Items.Add('Nanometer');
         ComboBox3.Items.Add('Mikrometer');
         ComboBox3.Items.Add('Millimeter');
         ComboBox3.Items.Add('Zentimeter');
         ComboBox3.Items.Add('Dezimeter');
         ComboBox3.Items.Add('Meter');
         ComboBox3.Items.Add('Dekameter');
         ComboBox3.Items.Add('Hektometer');
         ComboBox3.Items.Add('Kilometer');
        end;

  else
    begin
     ComboBox3.Items.Clear;
    end;

  end;
end;
Programmieren ist die Kunst aus Nullen und Einsen etwas sinnvollen zu gestalten.
Der bessere Künstler ist allerdings der Anwender, denn dieser findet Fehler, welche sich der Programmierer nicht vorstellen konnte.

Geändert von BadenPower (10. Jun 2015 um 11:45 Uhr) Grund: Else-Block in Case eingefügt
  Mit Zitat antworten Zitat