2016-04-21 11 views
2

Ich habe ein großes Problem beim Deaktivieren eines Schiebereglers in LabVIEW. Hier ist mein minimales Beispiel:LabVIEW deaktiviert Slider ist aktiviert

Ich habe einen einfachen Slider, der deaktiviert und ausgegraut ist, wenn der Wert höher als 5 ist. Sonst ist der Slider aktiviert.

enter image description here

Wenn ich den Schieber höher als 5 ziehen, wird der Slider abgeblendet. Aber ich kann den Schieberegler immer noch bewegen und den Wert ändern. Erst nachdem ich den Slider fallen gelassen habe, ist der Slider nicht mehr benutzbar.

Meiner Meinung nach ist dies ein großer Fehler von LabVIEW. Gibt es eine Möglichkeit, den Slider während des Ziehens zu deaktivieren?

Vielen Dank für Ihre Antworten!

Zusätzliche Informationen: Wie ich schon sagte, das Snippet ist nur mein minimal Beispiel das Grundproblem zu zeigen. In meiner Anwendung passiert Folgendes:

Ich habe StateMachine mit einem Zustand, der den Slider aktiviert und einen Zustand, der meinen Slider deaktiviert. Der Zustand kann sich jeden Moment ändern, also ist es möglich, dass der Benutzer den Schieberegler im Moment der Zustandsänderung benutzt -> Moment der Deaktivierung. In diesem Moment sollte der Slider direkt deaktiviert werden (er wird nur ausgegraut) ... nicht nach dem Loslassen. Die Begrenzung des Maximums ist also kein wirkliches Ziel. Ich möchte alle Slider-Aktionen für einen Benutzer verbieten.

Link to question asked on NI Discussion Forums

+0

Als Teil von LV R & D werde ich "Bug", aber nicht "großen Bug" gewähren.Es ist ein ziemlich schlechtes Benutzererlebnis, das Steuerelement unter ihnen herauszureißen, nur weil sie zufällig ihre Maus über einen bestimmten Schwellenwert bewegen, also würde ich nicht erwarten, dass die meisten Benutzeroberflächen dieses Muster verwenden. Ich schlage vor, Sie warten, bis ein Mouse Up-Ereignis Ihnen mitteilt, dass der Benutzer den Mauszeiger gezogen hat. – srm

+0

Ich kann nicht wirklich verstehen, was Sie sowieso erreichen möchten, aus Sicht der Benutzerfreundlichkeit. Der Benutzer kann das Steuerelement auf einen Wert unter 5 einstellen, aber wenn sie über 5 gehen, wird das Steuerelement deaktiviert? Welchen Wert soll das Steuerelement nach diesem Vorgang annehmen? Was passiert als nächstes im Programm? – nekomatic

+0

@srm Ich habe einige zusätzliche Informationen zu meiner Frage hinzugefügt. Dies sollte mein Problem besser beschreiben. – Fruchtzwerg

Antwort

4

Wie von Alexander_Sobolev auf dem NI-Forum vorgeschlagen (aber ich verspreche, ich dachte unabhängig davon!), Können Sie den Schieberegler ziehen, indem Sie ein Mausereignis generieren. Unter Windows können Sie dies mit Simulate Mouse.vifrom the NI site, die mouse_event von user32.dll ruft:

VI snippet showing use of Simulate Mouse.vi

Beachten Sie, dass eine der genannten Mausposition Eingänge des VI fälschlicherweise als ‚Erforderlich‘ gekennzeichnet ist; Das habe ich behoben, bevor ich den obigen Code erstellt habe.

Ich denke, dies ist eine UI-Technik, die nur verwendet werden sollte, wenn es wirklich durch die Anforderungen des Systems gerechtfertigt ist, und wenn die Benutzer verstehen, warum es so funktioniert; Andernfalls könnte es zu einer frustrierenden und nervigen Benutzererfahrung führen. Ich glaube nicht, dass es ein Fehler ist, eher eine Designentscheidung, weil das entgegengesetzte Verhalten unter anderen Umständen gleichermaßen unerwünscht sein könnte.

+0

Das funktioniert, also stimme ich es als die Lösung ab, aber für alle zukünftigen Leser sollten Sie ein UI-Design in Betracht ziehen, bei dem "der Benutzer den Schieberegler bewegt und dann separat auf die Schaltfläche" Commit "klickt." Dieser Entwurf würde bedeuten, dass die Benutzeränderung eines Werts ein Ereignis mit einem einzelnen Moment ist, das durch momentane Systemänderungen gesperrt werden kann, indem der Knopf ausgegraut wird, ohne die Erfahrung des Benutzers zu überraschen. Die Verwendung des Schiebereglers direkt, wie es die Frage will, wird nur für Werte empfohlen, die der Benutzer kontinuierlich sinnvoll ändern kann. – srm

2

Ich denke, man den Regler Wert auf 5 innerhalb der Gehäusestruktur einstellen könnte, neben der Vergrauung aus, durch eine andere Eigenschaft Knoten hinzugefügt wird. Dies sollte den Slider bei 5 festhalten, wenn der Benutzer versucht, ihn überzuziehen.

2

Dies scheint ein merkwürdiges Verhalten zu sein, da das Ereignis Wertänderung ausgelöst wird, solange die Maustaste gedrückt wird, auch wenn das Steuerelement deaktiviert & ausgegraut ist.

Eine Möglichkeit, den Wert zu begrenzen, wäre die Aktualisierung der maximalen Dateneingabegrenzeneigenschaft für dieses Steuerelement und das Festlegen der Antwort auf einen Wert außerhalb der Grenzwerte, damit Maximum als Bedingung verwendet wird.

Verwandte Themen