Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
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.
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.
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.
' 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.
18.01.2011, 21:30 (Dieser Beitrag wurde zuletzt bearbeitet: 18.01.2011 21:44 von GerdW.)
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 idea
@Unicorn:
Funktioniert die Kontexthilfe auch bei einer Exe mit eigenem (oder abgeschaltetem) Menü?
' 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 habe
Beste Grüße,
NWO
9 von 10 Stimmen in meinem Kopf sagen: Ich bin nicht verrückt,
die andere summt die Melodie von Tetris.
NI schrieb:To use the abort button is like using a tree to stop a car!