(29.08.2019 20:32 )GerdW schrieb: Lege doch das benutzerdefinierte Event als ValueChange an, wenn du darauf reagieren willst...
@GerdW:
Das verstehe ich nicht:
Was meinst du mit "als ValueChange anlegen"? Anlegen heißt ja Erstellen: Kann man denn einen Event als Quelle für ein benutzerdefiniertes Event verwenden? Ist mit nicht bekannt. Würde ich als sinnlos erachten: Wenn ein Event vorliegt, warum dann nochmals weiterleiten? Da kann man doch gleich dort reagieren, wo das Event auftritt.
Bisher arbeite ich nur mit LV bis Version 2017. Mag sein, dass es in 2019 was neueres gibt.
@Marcusuis:
Du möchtest ja (unbedingt) keine Cluster verwenden. Nun gut.
Einen Sachverhalt (spricht: ein Problem) hast du aber grundsätzlich immer: Für jedes einzelne Bedienelement brauchst du einen spezifischen Algorithmus, also entweder einen eigenen Sourcecode oder einen parametrierten Sourcecode, der dann für mehrere Bedienelemente brauchbar ist. Aufgabe: Wo steht der Sourcecode, wenn es sich um 50 Bedienelemente handelt?
Vorteilhaft ist es immer, so wenig wie möglich Sourcecode innerhalb eines VIs zu haben (=> SubVIs). Grundsätzlich geht das auch mit deinen Wünschen.
Sammle alle ValueChange-Events deiner 50 Bedienelemente in einem einzigen Eventcase. Dann hat du zwar sehr, sehr wenig Sourcecode - aber einen "Nachteil": die Liste der Eventcase-Auslöser wird sehr, sehr lang. Dem Compiler bzw. dem Runtime-System ist die Länge egal, nicht aber dem Programmierer. Beachte, dass dieses alles mit Clustern wesentlich einfacher wird.
In dem einen Eventcase bekommt du jetzt zwei relevante Daten: "Referenz" und "Neuer Wert". Beide gibst du jetzt in ein SubVI. Vorteil: Das VI, speziell diese Eventcase, bleibt klein und übersichtlich (Hinweis: Funktioniert auch mit Clustern).
Über die Referenz (=> Name und Typ des Bedienelementes) kannst du feststellen, welches Bedienelement verarbeitet werden soll und welchen Datentyp es hat. Beachte, dass der Typ von "Neuer Wert" Variant ist, wenn die Ereignisquellen unterschiedliche Typen haben.
In dem SubVI kann du nun per "Name von Eventquelle" mittels einer Case-Struktur Eventquellen-spezifische Sachen machen.
Ausblick:
Für Cluster gilt: "Neuen Wert" mit "Altem Wert" auf Gleichheit vergleichen. Erste False-Position im Vergleichsarray ergibt den neuen Wert und indirekt den Bedienelementnamen. Mit Bedienelementname und Wert so verfahren, wie bereits oben dargelegt.