AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Die ComboBox und Ihre Ereignisse

Ein Thema von Gjmara · begonnen am 9. Aug 2024 · letzter Beitrag vom 10. Aug 2024
Antwort Antwort
Gjmara

Registriert seit: 9. Aug 2024
4 Beiträge
 
#1

Die ComboBox und Ihre Ereignisse

  Alt 9. Aug 2024, 12:48
Delphi-Version: 12 Athens
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.993 Beiträge
 
Delphi 12 Athens
 
#2

AW: Die ComboBox und Ihre Ereignisse

  Alt 9. Aug 2024, 18:27
Erstmal, du meinst VCL und nicht FMX?

PS: Es gibt auch noch die TComboBoxEx
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 Delphi-PRAXiS > Programmierung allgemein > GUI-Design mit VCL / FireMonkey / Common Controls passen.
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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 9. Aug 2024 um 20:19 Uhr)
  Mit Zitat antworten Zitat
Gjmara

Registriert seit: 9. Aug 2024
4 Beiträge
 
#3

AW: Die ComboBox und Ihre Ereignisse

  Alt 9. Aug 2024, 20:11
Ja, ich habe VCL benutzt.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.421 Beiträge
 
Delphi 12 Athens
 
#4

AW: Die ComboBox und Ihre Ereignisse

  Alt 9. Aug 2024, 23:31
Bei der VCL-ComboBox gibt es ein Event OnSelect , das bei Auswahl eines Elements im DropDown oder über das AutoComplete ausgelöst wird.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.993 Beiträge
 
Delphi 12 Athens
 
#5

AW: Die ComboBox und Ihre Ereignisse

  Alt 9. Aug 2024, 23:56
[deleted]
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 9. Aug 2024 um 23:57 Uhr) Grund: verklickt
  Mit Zitat antworten Zitat
Gjmara

Registriert seit: 9. Aug 2024
4 Beiträge
 
#6

AW: Die ComboBox und Ihre Ereignisse

  Alt 10. Aug 2024, 18:42
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.
  Mit Zitat antworten Zitat
Gjmara

Registriert seit: 9. Aug 2024
4 Beiträge
 
#7

AW: Die ComboBox und Ihre Ereignisse

  Alt 10. Aug 2024, 19:02
Markierung als offene Frage gelöscht.
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:19 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz