LabVIEWForum.de - Events eines Controls in anderem VI bearbeiten

LabVIEWForum.de

Normale Version: Events eines Controls in anderem VI bearbeiten
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3
Ich glaube schon eher, dass SteffenSI anstatt pro Event einen Case zu machen, eine Event Struktur gemacht hat und deshalb Platzprobleme bekommt.

Hoffentlich ist es nicht soBig Grin
Hallo ihr alle,

erstmal vielen Dank für eure zahlreichen Beitraege. Ich werde nochmal kurz beschreiben was mien statur quo ist und was ich genau vorhabe und dann auf eure beitraege eingehen.
Also momentan steuere ich meine Controls als XControls. Jedes Control hat also schon seine eigene Eventstructure und mein Hauptprogramm ist (endlich) ziemlich schlank und übersichtlich, was ich gerne so belassen würde. Nun moechte ich aber weg von den XControls, zum einen weil sie mir manchmal fehlerhaft vorkommen, zum anderen weil man die XControls wie ich finde nur recht schwierig ansprechen kann. Teile ich bspw. die Referenzen auf die XControls meiner Steuerungsklasse mit, so sind die XControls standardmaesig gesperrt wenn ich mein Projekt lade, da die Klasse ja darauf zugreift etc. Zumindest: Weg von XControls.
Stattdessen würde ich gerne für jedes Control (bzw. für jede Art von Control, Slider bspw kommen mehrfach vor) eine Klasse erstellen. Jede Controlklasse koennte dann von einer abstrakten Control-Basisklasse erben, die bspw die Funktionen init (initialiseren des Controls mit Werten aus xml-Datei), refresh (aktualisieren der Anzeige wenn sich die zugrundeliegenden Parameter geandert haben) etc. beinhaltet. Naja, hab das noch nicht bis aufs letzte durchdacht, weil ich eben beim groben testen einer solchen Klasse, auf das Problem gestoßen bin, welches ich hier gepostet habe.

Denn jede Control-Klasse würde dann ja auch ein SubMain-VI beinhalten, welches eine while loop beinhalten würde, die während der laufzeit meines programms dauernd läuft und dort die user-events in einer event-strucutre abfragt.
Also:
Das Control liegt auf dem Frontpanel des MainVI's meines Programms, die Behandlung der Events findet aber in dem jeweiligen SubMain-VI der Controlklasse statt.

' schrieb:Mal so in Blaue gesprochen: Pro Control ein SubPanel und in dem SubPanel das SubVI ausführen. Das Control liegt dann auf dem FP des SubVIs. Mit einem SubVI, also quasi einem (Cluster-)Control, geht das auf jeden Fall gut.

Mir sagt Subpanel leider nichts, koenntest du dazu noch zwei zeilen schreiben (leider sitz ich gerade auch nicht an meinem LabVIEW-Arbeitsplatz und kann danach suchen...)

' schrieb:Warum eigentlich nicht mit dynamischen Events? Könntest ja die Referenz des Controls dem SubVI übergeben und dort Regestrieren. Einfach ists auch?

Also damit habe ich etwas rumprobiert. Aber zum einen entsteht natürlich mehr Logik und ich konnte glaub nicht (falls mein Control ein Cluster ist) auf die Events der einzelnen Elemente meines Clusters zugreifen (bspw. statt "Cluster->Eingabefeld1 ValueChange" geht nur "Cluster->ValueChange"). Wenn du in dieser Richtung schon mal was gemacht hast schrotti, wäre es klasse wenn du es hochladen koenntest. Weil jede Controlklasse müsste sowieso über die Referenz des Controls verfügen, welches sie beschreibt, sodass dieses Datum da wäre.

' schrieb:Nun gut, dann hättest Du eben eine Evestruktur mit 100 Cases.

Das möchte ich auf keinen Fall mehr haben. Das war der Zustand bevor XControls kamen. Zum einen wegen der von IchSelbst angesprochenen Wiederverwertbarkeit, zum anderen weil es davor auch sehr unübersichtlich und zeitraubens war, bspw. wenn man einen speziellen Case gesucht hat.

' schrieb:Wahr ist aber vielleicht, daß Dein Projekt mit einer guten Idee deutlich einfacher sein könnte

Ja natürlich. Falls ihr gute Vorschläge habt bin ich euch sehr dankbar.

Viele Grüße,
Steffen
Anbei ein Beispiel, wie du an die Referenzen von Elementen in Cluster und Tab kommst. Es gibt bereits auf ni.com oder Lava ein VI, dass alle Referenzen ausspuckt, aber ich kanns gerade nicht finden. Danach würde ich dieses Array einfach den SubVIs übergeben, die sich daraus die Referenzen für den Elementtyp rausziehen sollen, für das es jeweils gedacht ist.

Lv86_img[attachment=19428]
' schrieb:Mir sagt Subpanel leider nichts, koenntest du dazu noch zwei zeilen schreiben (leider sitz ich gerade auch nicht an meinem LabVIEW-Arbeitsplatz und kann danach suchen...)
Ein SubPanel ist ein Fenster auf dem FP von VI-1, in dem das FP von VI-2 dargestellt wird. Die beiden VIs VI-1 und VI-2 laufen parallel und somit gleichzeitig. Das ist dann so, wie wenn du unter Windows eben zwei Fenster offen hast.

Hab ich aus deinem Positing richtig herausgehört, dass du OOP in LV machen willst, also LVOOP ?
Oh man - nichts klappt. Irgendwie ist alles da, aber ich bekomms nicht so hin wie ich es moechte. Kann ich nicht irgendwie mit der Register Events Funktion einfach alle moeglichen Events eine Controls (und im Falle eines Clusters noch zusaetzlich seiner Komponenten) auf einmal registrieren?

Und noch eine Frage: Wenn ich mir AllControls ausgeben lasse und das Array in ein Cluster wandle, dann haben die Eintraege ja Namen wie Control[0], Control[1], etc. Andernseits kann ich ja ueber label.Text auf den Namen des entsprechenden Controls zugreifen. Kann ich nun das so arrangieren, dass die Namen der Controls als Clusternamen (statt Control[x]) angezeigt wird?

' schrieb:Hab ich aus deinem Positing richtig herausgehört, dass du OOP in LV machen willst, also LVOOP ?

Ja, also das Programm ist schon objektorientiert - nur die Verwendung der XControls anstatt ueblicher GUI Klassen war bisher noch inkonsistent. Das ist noch ein weiterer Grund warum ich gerne auf diese verzichten moechte.

Gruss Steffen
Ich braeuchte einfach nur eine Funktion, der ich eine Referenz eines Controls reingebe und die mir alle denkbaren Events dieses Controls als "event registration refnum" rausgibt sodass ich es nur noch an eine event structure anschliessen kann und dann schoen darauf zugreifen...
Probiere es mal so:
Ja - so muss man halt für jedes Control einzeln die events die man haben möchte registrieren. Zusätzlich find ich die Controlnamen ([0] <?>) noch unschoen so (deshlab meine Frage ob man den Clusterelementen die Controlnamen verpassen kann). Aber ja, ich denke die Lösung wird irgendwie darauf hinauslaufen.

@IchSelbst: Noch eine Frage zu den Subpanels. Kann man deren Rahmen irgendwie ausblenden? So das der Benutzer quasi gar nichts von dem Subpanel sieht?

Gruß Steffen
' schrieb:Kann man deren Rahmen irgendwie ausblenden?
Klar. Dann sieht man ihn aber auch in der IDE nicht mehr.

Guckst du Bild: Im Werkzeug Cursorauswahl Farbauswahl wählen (ganz unten). Den Farbstift auf das SubPanel setzen, rechts klicken und (oben rechts) Transparent wählen.
' schrieb:Ja - so muss man halt für jedes Control einzeln die events die man haben möchte registrieren. Zusätzlich find ich die Controlnamen ([0] <?>) noch unschoen so (deshlab meine Frage ob man den Clusterelementen die Controlnamen verpassen kann).

Anbei noch eine kleien Anleitung, wie es vllt etwas weniger klickarbeit ist. Aber es bleibt ne Menge zu machen.

Lv86_img[attachment=19509]
Seiten: 1 2 3
Referenz-URLs