INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

(viele) Bedienelemente deaktivieren / aktivieren



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!

16.08.2018, 09:53
Beitrag #1

F.Bi Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 152
Registriert seit: Oct 2007

LabView 2016
2007
EN

55218
Deutschland
Question (viele) Bedienelemente deaktivieren / aktivieren
Um die Programmoberfläche für den Anwender übersichtlich zu gestalten, werden bestimmte Bedienelemente je nach Anforderung ausgegraut / eingeblendet bzw. aktiviert, außerdem werden Cluster, Tabs usw. genutzt. Da das de- aktivieren der Bedienelemente über Property Nodes viel Platz im Programmcode einnimmt, will ich das in ein Sub-VI auslagern.

Es wird schon seit einiger Zeit ein Sub-VI (Set Enable State on Multiple Controls) verwendet, aber die benötigten Referenzen benötigen nicht (viel) weniger Platz.

Die Referenzen in ein Array oder ein Cluster (Darstellung als Icon) zu packen, würde Platz sparen.
Das Erzeugen eines entsprechenden Arrays bzw. Cluster ist mir leider nicht gelungen.


Ein Sub-VI mit mehreren Szenarien in einer Case-Struktur könnte eine weitere Möglichkeit sein.

Die Zustände der Controls würde im Sub-VI in entsprechenden Cases (Szenarien) festgelegt werden und das Sub-VI im Hauptprogramm mit dem Szenarien-Namen aufgerufen werden.

Dazu müssten alle Controls auf dem Panel erfasst werden, die Referenzen und Labels in ein Array gepackt werden. Wenn die Labels auch noch in einem Cluster stehen würden, könnte man diese über Unbundle by Name auswählen und damit die Referenzen zuweisen.

Das Auslesen der Controls ist kein Problem, aber das mit den Labels in einem Cluster schon.


Von den Umsetzungsproblemen abgesehen, finde ich beide Möglichkeiten nicht ganz optimal.

Hat jemand eine bessere Idee oder sogar schon eine fertige Lösung im Einsatz?


Angehängte Datei(en) Thumbnail(s)
   

Gruß
Frank
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
16.08.2018, 10:17 (Dieser Beitrag wurde zuletzt bearbeitet: 16.08.2018 10:17 von GerdW.)
Beitrag #2

GerdW Offline
______________
LVF-Team

Beiträge: 16.820
Registriert seit: May 2009

11SP1, 17SP1 (ab und zu 20)
1995
DE_EN

10×××
Deutschland
RE: (viele) Bedienelemente deaktivieren / aktivieren
Hallo Frank,

ich mache das so:
1. Ich sammle alle mich interessierenden Referenzen mittels eines subVIs ein:
   
Hier muss man darauf achten, die nötige Rekursionstiefe bei der Suche nach Controls zu erreichen (TabContainer, Cluster).
Neuere LabVIEW-Versionen bringen dafür auch ein fertiges VI mit, aber ich habe das hier schon unter LV8 entwickelt…

2. Diese Referenzen werfe ich in eine FGV, die sich intern zu jeder Referenz einmal das Label des Controls holt und merkt:
   
3. Wann immer es jetzt interessant wird, rufe ich diese FGV über einen Wrapper auf und sage nur noch, welches Control (anhand seines Labels!) en-/disabled werden soll:
   

In diese FGV habe ich noch etwas "Logik" hineingepackt, damit mehrere Bedingungen für das En-/Disablen verwaltet werden. Damit erreiche ich, dass ich Controls an mehreren Stellen beeinflussen kann.
Beispiele:
- In der Konfigurationsdatei wird ein Mess- bzw. Ausgabekanal deaktiviert: die Routine, die die Konfiguration einliest, setzt hier schon alle deaktivierten Kanäle auf "disabled".
- In der Prüfstandssoftware wird ein Regelalgorithmus aktiviert: die zugehörige Routine setzt die entsprechenden Stellkanäle auf "disabled", da ja jetzt der Regler übernimmt.
- Es wird Regler A aktiviert, aber Regler B darf nicht gleichzeitig arbeiten: also setzt ReglerA den Einschalter von ReglerB auf "disabled"…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
16.08.2018, 12:13
Beitrag #3

F.Bi Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 152
Registriert seit: Oct 2007

LabView 2016
2007
EN

55218
Deutschland
RE: (viele) Bedienelemente deaktivieren / aktivieren
Gerd, das entspricht im Grunde meiner Idee.

zu 1. Habe ich mit TabContainer und Cluster schon umgesetzt (Weitere würden bei Bedarf folgen.). Deine Version ist etwas eleganter z.B. mit den Klassennamen.
Wo findet man das fertige VI der neueren LabVIEW-Versionen? Da ich das VI noch um weitere Möglichkeiten erweitern müsste, wäre das wahrscheinlich einfacher.

zu 2. Das Holen der Labels habe ich in 1. integriert. Das ist ja nur ein Property Node "Label.Text".

zu 3. Das wollte ich auch so machen, aber hier hänge ich an der Umsetzung.
Das mit der "Logik" entspricht wahrscheinlich meinen "Szenarien".
Wie klickst du die Logik zusammen? Ich wollte das über Cluster mit den Labels machen.

Könntest / würdest du deine VIs hier zur Verfügung stellen?

Gruß
Frank
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
16.08.2018, 12:59 (Dieser Beitrag wurde zuletzt bearbeitet: 16.08.2018 13:02 von GerdW.)
Beitrag #4

GerdW Offline
______________
LVF-Team

Beiträge: 16.820
Registriert seit: May 2009

11SP1, 17SP1 (ab und zu 20)
1995
DE_EN

10×××
Deutschland
RE: (viele) Bedienelemente deaktivieren / aktivieren
Hallo Frank,

Zitat:Zu 1. Wo findet man das fertige VI der neueren LabVIEW-Versionen?
Früher in den HiddenGems. (Schau mal in das PDF für LV2014.)
Immer noch: vi.lib\Utility\traverseref.llb

Zitat:zu 3. Das wollte ich auch so machen, aber hier hänge ich an der Umsetzung.
Ich merke mir zu jedem Control die "Caller" und deren En-/Disable-Wünsche. (Im letzten Bild oben fehlt noch ein String-Input an der Enable/Disable-Funktion, die den "Caller" angibt.)
Nein, die VIs kann ich hier nicht hochladen…

Zitat:Wie klickst du die Logik zusammen? Ich wollte das über Cluster mit den Labels machen.
Alles, was mit Key-Value-Paaren zusammenhängt, löse ich mit VariantAttributen.
Einfach den Control-Label als Attributnamen verwenden, im Attribut selbst ist dann die Datenstruktur zur Verwaltung des En-/Disable-Zustands gespeichert.

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Bedienelemente platzieren Hubert R. 10 4.501 05.11.2020 10:10
Letzter Beitrag: Hubert R.
  variable Anzahl Bedienelemente TpunktN 4 1.010 19.08.2020 11:35
Letzter Beitrag: jg
  Bedienelemente bündeln zum Auslösen eines Events Marcusius 12 4.097 03.09.2019 17:24
Letzter Beitrag: Marcusius
  Bildschirmschoner deaktivieren Snoop2000 10 7.831 18.06.2019 15:50
Letzter Beitrag: Ratio
  Bedienelemente nach Bedarf ein / ausblenden 1johleh 14 15.916 31.05.2017 13:18
Letzter Beitrag: MaxP
  Viele Variablen in SubVI nutzen chrisw 3 2.003 02.12.2016 11:35
Letzter Beitrag: GerdW

Gehe zu: