LabVIEWForum.de
Wert per Tastendruck übernehmen - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Wert per Tastendruck übernehmen (/Thread-Wert-per-Tastendruck-uebernehmen)



Wert per Tastendruck übernehmen - NoWay - 25.02.2015 10:45

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


RE: Wert per Tastendruck übernehmen - NoWay - 25.02.2015 11:07

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


RE: Wert per Tastendruck übernehmen - GerdW - 25.02.2015 11:18

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



RE: Wert per Tastendruck übernehmen - NoWay - 25.02.2015 11:48

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