LabVIEWForum.de - Wert per Tastendruck übernehmen

LabVIEWForum.de

Normale Version: Wert per Tastendruck übernehmen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen.

Bei einer aktuellen Anwendung habe ich eine größere Listbox programmiert, aus der man per Doppelklick zeilenweise Daten ausliest und in einem seperaten Popup zwecks Manipulation darstellt.
Das Popup verfügt über einen OK Button udn einen Discard Button.

OK -> Übernehme den geänderten Wert und schreibe die neue Zeile zurück an das aufrufende VI zwecks Weitererarbeitung
Discard -> Werte werden nicht übernommen und alte Daten bleiben erhalten.

Beide Buttons schließen das Popup. Zusätzlich habe ich eine Prüfung auf Tastendruck implementiert, um den Komfort zu erhöhen. Heißt also: Enter/Return sollen den OK Button triggern und ESC den Discard Button.

Diese Funktionen werden dank der Eventstruktur absolut zuverlässig ausgeführt. Das eigentliche Problem kommt jetzt:
Wenn der User einen Wert eingibt und DIREKT Enter/Return drückt, ohne vorher den Cursor aus dem Eingabefeld bewegt (per Mausklick) zu haben, wird der eingetragene Wert NICHT übernommen.
Klickt der User aber vorher einfach woanders hin oder in ein anderes Feld, wird der Wert übernommen.
Kurzum: Labview übernimmt den Eingabewert scheinbar erst dann wenn das betreffende Feld "verlassen" wurde.

Ich habe dieses Problem auf ein Minimalbeispiel für LV2010 heruntergebrochen und bin für jede Idee dankbar, wie ich es lösen könnte.

Gruß
NoWay
Problem gelöst.

Im Key Down? Event musste ich zu den jeweiligen Eigenschaftsknoten noch den Keyfocus hinzufügen und schon funktioniert es scheinbar. Thema hat sich damit erübrigt.

Gruß
NoWay
Hallo NoWay,

einfache und wahrscheinlich bessere Lösung:
Erstelle im Popup ein weiteres ValueChange-Event für dein Numeric!

Noch bessere Lösung:
- Dein Popup krankt an einer ganz anderen Stelle: es MUSS einen Wert zurückgeben, egal ob der User OK oder CANCEL auswählt.
Welchen Wert soll es zurückgeben, wenn du CANCEL drückst? Momentan ist diser Wert genau definiert: Default. Ist das so gewollt?
- Noch ein Problem: Es wird empfohlen, Inputs und Outputs eines VIs (also was am ConnectorPane verbunden ist) immer außerhalb irgendwelche Strukturen zu platzieren, damit es garantiert ausgeführt wird. Dies hast du hier missachtet, was erst zum schon genannten Default-Problem führt…

Also: Logik im Popup verbessern!
Code:
int Output = Popup(int: Input)
IF OK THEN
  Output := newValue
ELSE
  Output := Input
ENDIF
Hallo Gerd.

Das sind absolut berechtigte Einwände, die aufgrund meines banalen Beispiels kommen mussten Blush. In meiner tatsächlichen Anwendung ist das berücksichtigt, da ich dem Popup wesentlich mehr Informationen mit auf den Weg gebe und sie durchschleife falls der User auf Cancel klickt. So habe ich sichergestellt, das ich die unveränderten Werte zurückgeben kann. Da mir aber lediglich die Problematik mit dem Tastendruck wichtig war, hatte ich diese Dinge in meinem Beispiel nicht aufgegriffen.
Die Connectorcontrols/Indicators sind in der richtigen Anwendung ebenfalls herausgeführt.

Lerneffekt: Ich werde in Zukunft mehr Sorgfallt in die Erstellung von Beispielen stecken Wink

Gruß
NoWay
Referenz-URLs