LabVIEWForum.de
Zugriff auf Textlabels in Klassen - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: LVOOP (/Forum-LVOOP)
+---- Thema: Zugriff auf Textlabels in Klassen (/Thread-Zugriff-auf-Textlabels-in-Klassen)

Seiten: 1 2


Zugriff auf Textlabels in Klassen - cpinkle - 05.09.2014 11:56

Hallo,

Ich bin mal wieder an meine Grenzen gestossen. Vielleicht hab ich auch wieder nur ein Verständnisproblem und so wie ich mir das vorstelle funktioniert das garnicht.... Blush

Ich brauche die Textlabels aus meinem Klassenobjekt. Sagen wir mal es heisst Waldemar.ctl in der Klasse Waldemar.lvclass.

[attachment=50668]

Normalerweise wenns nur ein einfaches Cluster wäre würde ich das so machen.

[attachment=50669]

Aber in Klassenobjekten scheitere ich kläglich, da ich einfach nicht an die Referenzen der einzelnen Controls im Waldemar.ctl rankomm. Gibt es da ne Möglichkeit?

Im Moment hab ich mir da mit typedefs von Controls geholfen. Ich definiere ein typedef, schiebe das in Waldemar.ctl. Und wenn ich die Labels brauche schiebe ich mir noch ein zusätzliches Control von dem typedef in das VI hin. Leider find ich diesen Würgaround nicht schön. Das muss doch eleganter gehen.

Würd mich über jegliche Hilfe freuen und ihr wisst bestimmt wies richtig geht! Vielen Dank im Voraus!

Cheerio Carsten


RE: Zugriff auf Textlabels in Klassen - jg - 05.09.2014 12:03

Wie wäre es, dafür eine eigene Methode zu schreiben?

Gruß, Jens


RE: Zugriff auf Textlabels in Klassen - BNT - 05.09.2014 12:33

(05.09.2014 12:03 )jg schrieb:  Wie wäre es, dafür eine eigene Methode zu schreiben?

Gruß, Jens

Genau richtig! Die Klassen-Attribute sind immer privat. Von ausserhalb der Klasse kannst Du eh nicht das zrugreifen. Also ist eine explizite Methode das richtige.

Ich nehme an, dass Du die Namen der Klassen-Attribute auch nicht jeden Tag ändern wirst.

Gruß Holger


RE: Zugriff auf Textlabels in Klassen - GerdW - 05.09.2014 12:33

Hallo cpinkle,

Zitat:Aber in Klassenobjekten scheitere ich kläglich, da ich einfach nicht an die Referenzen der einzelnen Controls im Waldemar.ctl rankomm.
Ist es nicht der Sinn von Objekten, eben den Objektinhalt strikt vor der Außenwelt abzuschirmen und den Zugriff darauf nur über Methoden der zugehörigen Klasse zu erlauben?
Also Jens' Vorschlag nutzen…


RE: Zugriff auf Textlabels in Klassen - cpinkle - 05.09.2014 13:23

Danke erstmal für die schnelle Rückmeldung!

Die Daten sollen privat sein und innerhalb der Klasse bleiben. Das ist richtig. Ich möchte die Labels auch nicht innerhalb, noch von ausserhalb überschreiben.
Ich möchte nur innerhalb der Klasse die Labels der Controls in Waldemar.ctl als Liste von Strings auslesen.

Ich würd ja auch eine Methode in der Klasse Waldemar.lvclass schreiben, aber ich kann ja keinen Accessor auf Labels oder dergleichen machen.
Ich kann mit einem Accessor immer nur auf den Wert zugreifen, oder hab ich da was falsch verstanden?

VG Carsten


RE: Zugriff auf Textlabels in Klassen - GerdW - 05.09.2014 13:26

Hallo cpinkle,

du erstellst dir eine Methode, die einfach die zum Zeitpunkt der Erstellung dieser Methode verwendeten Labels aus Stringarray-Konstante enthält und ausgibt. Wie BNT schon sagte: so oft wirst du doch die Struktur deines Objekts nicht ändern…

Wozu willst du das überhaupt programmatisch zur Laufzeit lösen?


RE: Zugriff auf Textlabels in Klassen - cpinkle - 05.09.2014 14:33

Hallo GerdW,

Ok so ähnlich mache ich es ja auch und zwar mit meinen "typedefs".

Meine Idee dahinter ist, nicht in Waldemar.ctl Anzahl X Labelnamen zu ändern, und dann auch noch X-mal in der Stringarray Konstante in meiner Methode.
Ich möchte einen zentralen Punkt haben, wo ich die Labelnamen bündele und auch im Bedarfsfall ändern kann, ohne an 2 oder 3 Stellen das Ganze zu machen. Der Kunde ist König... Wink
Und der Kunde ändert gerne, sag ich euch...Blink
Die Labelnamen nutze ich auch als Begleittext in der Ausgabe, um zu erklären welches Bit gerade wie steht. Beispiel: "GPIO_1 = 1". Dann heisst das Control auch "GPIO_1".

Meine Lösung sieht wie folgt aus:
Ich definiere mir ein Control als "typedef", beispielsweise ein Cluster mit mehreren Booleans und Numerics.
Dann setze ich dieses definierte Control in Waldemar.ctl ein.
Dasselbe definierte Control nutze ich auch in der Methode zum Auslesen der ganzen Labeltexte, das ist halt ein extra Control was ich spendieren muss.
Waldemar.ctl als auch die Methode zum Auslesen der Labels enthalten dasselbe definierte Control und sind somit verknüpft. Im Falle von Änderungen
brauche ich nur das definierte Control anpassen und beides wird angepasst.

Ich dachte ich könnte mir das Extra Control in der Methode sparen, indem ich auf das Control in Waldemar.ctl zugreifen kann....
Ich hoffe ich konnte es einigermassen erklären, warum ich das mache.... Blush

VG Carsten


RE: Zugriff auf Textlabels in Klassen - BNT - 05.09.2014 15:16

Das hört sich fast nach einem ähnlichen Problem an , wie es beim Umschalten von Sprachen existiert.

Meiner Meinung nach sollte ein Label die Funktion eines Attributs oder eines Anschlusses der Connetor-Pane bezeichnen. Für Laufzeit spezifische Anpassungen wäre doch eher die Caption geeignet.

Das löst zwar nicht Deine Problem, zeigt aber, dass Dein Programmentwurf nicht optimal ist. Funktion und Darstellung sollten entkoppelt sein.

Gruß Holger


RE: Zugriff auf Textlabels in Klassen - Kiesch - 05.09.2014 15:18

Ka. ob dir das hilft, aber zumindest kannst du aus der Referenz auf dein Objekt den Text in der Kontexthilfe auslesen. Wenn du also entsprechend richtig dort beschreibst (mit irgendeinem Marker) wie die einzelnen Attribute heißen und die in der richtigen Reihenfolge reinpackst solltest du so eine Liste wie du möchstest auch aus der Kontexthilfe zusammenparsen können und müsstest dann nur noch das Objekt und den Hilfetext ändern wenn sich am Objekt irgendwas ändert.

Aber sinnvoller ist vermutlich trotzdem eine interne Liste im Objekt zu haben die die NAmen der Attribute beinhaltet.


RE: Zugriff auf Textlabels in Klassen - GerdW - 05.09.2014 15:20

Da kann ich BNT nur zustimmen.

Anwendungsfall: Deine Hardware bietet ein festgelegte Anzahl GPIO-Pins an, die auch noch eine festgelegte Bezeichnung haben (z.B. GPIO03). Wenn dieser Pin jetzt eine "Bedeutung" (z.B. "PWMOutPump") bekommt, kann man diese im Label des zugehörigen UI-Elements darstellen…

Oder glaubst du etwa, ich kompiliere jedesmal meine komplette Prüfstandssoftware, weil sich im PST-Aufbau der Name eines Drucksensors oder eines Schalters ändert?