LabVIEWForum.de - "On Focus"-Event

LabVIEWForum.de

Normale Version: "On Focus"-Event
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Wie bekomme ich ein Event, wenn der Benutzer in ein Control klickt oder es mit Tab auswählt? Kann es wirklich sein, dass es kein "on Focus" Event für Controls gibt? Zumindest die Events, die ich für z. B. ein String-Control auswählen kann, sind dafür nicht brauchbar.
Hallo,

für das auf ein Control klicken gibts das Event Mouse Down.
Für das Tab kannst du ja ein Event erstellen, das auf App-Ebene auf Keydown reagiert und bei Tab-Key den Keyfocus ausliest und bei dem gewünschten Control den Code ausführt.

Bei Tab auf OK wird das VI beendet.

Gruß Richard

Lv09_img2
[attachment=31698]
Genau dieses Zusammenbasteln aus anderen Events wollte ich vermeiden. Das ist alles andere als wartungsfreundlich. Es verdoppelt Code ganz abgesehen von der zusätzlich notwendigen Logik, ob es überhaupt ein "on focus" war (nicht jeder Klick auf ein Control ist ein solches Event). Und bei jedem Keydown ein Event zu generieren, obwohl ich nur Tabs und nur in bestimmte Controls abfangen will, ist auch nicht grade "sauber". Ich bin etwas verwundert, dass soetwas, das es in anderen Programmiersprachen seit Jahrzehnten gibt, nicht verfügbar ist (und eben weil ich's nicht glauben können habe, habe ich hier gefragt). Da muss ich wohl schauen, ob ich ohne die Funktionalität auskomme und hoffen, dass es irgendwann mal implementiert wird.
Wozu brauchst Du das "On Focus" Ereignis?
' schrieb:Wozu brauchst Du das "On Focus" Ereignis?
Für mehrere kleine Dinge, die einem Benutzer hoffentlich helfen:
Als erstes möchte ich in einem String-Control einen Default-Text haben, der gelöscht wird, sobald es Fokus hat (z. B. "Dateinamen hier angeben..."). Und wenn man das Feld verlässt und es steht nichts darin, soll wieder dieser Text auftauchen.
Zweitens möchte ich für bestimmte Controls eine Hilfe (in einem zusätzlichen Text-Feld) anzeigen, sobald es Fokus hat.
Drittens soll die Farbe die Zusammengehörigkeit (die sich ändern kann) von Controls andeuten (Ich möchte darstellen, welche Felder durch das jeweils ausgewählte beinflusst werden).

Alles Dinge, für die ein "OnFocus"-Event genau das richtige wäre.
Zu 2.)
Hier könntest Du "Description" und "Tip" für die entsprechenden Controls ausfüllen. Der Benutzer kann dann mit Ctrl+H die Kontexthilfe mit den eingegeben Hilfetexten - allerdings in einem eigenen Fenster - aufrufen.

Zu 1.) und 3.)
Hier wäre in der Tat das "OnFocus"-Event sehr nützlich. Mit dem "Mouse Enter" und "Mouse Leave" könnte man das "OnFocus"-Event ersetzen, solange die Maus benutzt wird.
Hallo Lupin,

bis es ein echtes KeyFocus-Event gibt, kannst du ja folgendes machen:
- Referenzen der betreffenden Controls in einem Array bündeln
- in einer Schleife regelmäßig den "KeyFocus" dieser Referenzen abfragen
- UserEvent erzeugen unter Verwendung der Referenz, die gerade KeyFocus hat...

Ja, ist Polling. Aber würde funktionieren.
Um eine andere Lösung zu beschleunigen: NI IdeaExchange! Edit: new ideaSmile

@Unicorn:
Funktioniert die Kontexthilfe auch bei einer Exe mit eigenem (oder abgeschaltetem) Menü?
' schrieb:..
@Unicorn:
Funktioniert die Kontexthilfe auch bei einer Exe mit eigenem (oder abgeschaltetem) Menü?

Ja, klappt auch mit Exe. Wenn ich jedoch die Menubar des Haupt-VI ausblende, weiß ich nicht, ob es klappt.
' schrieb:Ja, klappt auch mit Exe. Wenn ich jedoch die Menubar des Haupt-VI ausblende, weiß ich nicht, ob es klappt.

Ja, in meiner Exe gehts auch. Habe dort eine eigene Menübar am laufen, die Standardmenübar ist ausgeblendet. Das Hilfefenster lässt sich trotzdem aufrufen, wobei bei mir aber nix drin steht, da ich für die Elemente nichts erstellt habeSmile

Beste Grüße,
NWO
Referenz-URLs