![]() |
Delphi-Version: 12 Athens
Die ComboBox und Ihre Ereignisse
Hallo, ich verzweifle gerade bei der ereignisgesteuerten Anwendung der ComboBox. Nach dem ich bereits zig Code Iterationen mit Copilot und X-Chat durch habe, ist bisher nur eine für mich unbefriedigende Lösung übrig geblieben.
Aufgabe: Ich möchte ein Element aus dem Dropdown Menü auswählen, aber auch gleichzeitig eine Eingabe des Anwenders akzeptieren, um die dann ggf. mit in die spätere neue Auswahl zu übernehmen. Meine 2 Probleme: Nur aus dem Dropdown Menü auswählen ist einfach mit OnChange zu lösen. Leider löst OnChange aber auch bei jedem einzelnen Buchstaben aus, den der Anwender tippt. Weitere Lösungsansätze sich mit OnChange lediglich zu merken, dass der Anwender angefangen hat eine Eingabe zu starten und dann die Auswahl per Click im Dropdown Menü über ein anderes Ereignis zu verarbeiten, führen zu dem Problem, dass bei den meisten anderen Ereignissen (z.B. OnCloseUp) die neue Auswahl noch nicht verfügbar ist, erst nachdem das Ereignis abgearbeitet wurde. Unbefriedigende Lösung: mit OnChange einen Timer mit false/true mit jeder Eingabe neu starten und nach 0,5…2s HOFFEN, dass der Anwender mit Tippen fertig ist. Ich hoffe, dass hier jemand das schon mal gelöst hat und mir eine relativ einfache Lösung zeigen kann. Vielen Dank schon mal. |
AW: Die ComboBox und Ihre Ereignisse
Erstmal, du meinst VCL und nicht FMX?
PS: Es gibt auch noch die TComboBoxEx :angle: Die hat z.B. den Vorteil, dass man das Items/DropDown auch nach dem Öffnen noch ändern kann, z.B. um Daten nachzuladen, zu filtern usw. Ich nutze das z.B. für einen PortScan, wo die Liste schon aufgeht und dann in Threads die Ports gesucht werden (was dauern kann) und nach und nach hinzukommen, aber man vorher schon selbst eingeben oder vorhandenes wählen kann. (im OnCloseUp der Terminate-Befehl an die Threads) Außerdem behandelt der einige Ereignisse anders, falls ich mich recht erinner. Im OnChange nur verarbeiten, wenn ItemIndex >= 0 oder bei < 0, wenn der Text ein Items.IndexOf >= 0 liefert, also wenn etwas gewählt wurde und ansonsten erst im OnExit oder z.B. im OnKeyUp bei VK_RETURN, also wenn der Nutzer sagt, er sei fertig. (ja, oder zusätzlich halt noch mit Timer aus OnChange) PS: Eigentlich würde es eher in ![]() GUI-Design mit VCL / FireMonkey / Common Controls (z.B. Benutzung und/oder Weiterentwicklung von Komponenten) --> im Form-Designer Object-Pascal / Delphi-Language (z.B. Syntax wie Schleifen oder Bedingungen sowie Funktionen der Standard-Units) --> im Quellcode |
AW: Die ComboBox und Ihre Ereignisse
Ja, ich habe VCL benutzt.
|
AW: Die ComboBox und Ihre Ereignisse
Bei der VCL-ComboBox gibt es ein Event
Delphi-Quellcode:
, das bei Auswahl eines Elements im DropDown oder über das
OnSelect
Delphi-Quellcode:
ausgelöst wird.
AutoComplete
|
AW: Die ComboBox und Ihre Ereignisse
[deleted]
|
AW: Die ComboBox und Ihre Ereignisse
Erst einmal Danke für Eure Hilfe.
Meine alte Timer Lösung habe ich inzwischen verworfen und durch eine Kombination von OnSelect und OnKeyUp mit Prüfung auf VK_RETURN ersetzt. OnSelect allein hatte mir leider nicht geholfen, da auch dieses Ereignis ein für mich recht merkwürdiges Verhalten zeigt: OnSelect wird ausgelöst, wenn irgendeine Auswahl angeklickt wird (Auch bei der, die gerade ausgewählt war) und wird ausgelöst, wenn irgendein Zeichen gedrückt wird, das identisch mit einem 1. Buchstabe aus der Liste ist (Jedoch in diesem Fall nicht wenn es identisch mit dem ersten Buchstaben der aktuellen Auswahl ist). Ich verwende jetzt OnSelect nur, um mir zu merken, dass durch Klick oder Autofill etwas gewählt wurde und merke mir noch die Auswahl. In OnKeyUp prüfe ich nun, nach Erkennen der Entertaste, ob es eine Änderung gab und setze dann mein Flag aus OnSelect zurück. Mit Dieser Änderung war die schlechte Timer Lösung hinfällig. Nochmal vielen Dank für Eure Hinweise. |
AW: Die ComboBox und Ihre Ereignisse
Markierung als offene Frage gelöscht.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:45 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 by Thomas Breitkreuz