Hallo zusammen,
Ich habe an der Programmierung für ein anderes Thema gearbeitet, als ich die Community nach Unterstützung durchsuchen musste, aber ich bin darauf gestoßen Post von vor vielen Jahren und ich fragte mich, ob das möglich ist (es gab keine Lösung für den ursprünglichen Beitrag)? Kann man Outline-Boxen eine Funktion zuweisen, die abhängig von ihrem geöffneten/geschlossenen Zustand andere Outline-Boxen schließt/öffnet? Kann das Fenster automatisch aktualisiert werden, um alle anderen Gliederungsfelder außer dem gerade geöffneten zu schließen, wenn ein anderes Gliederungsfeld geöffnet wird?
Ich habe verschiedene Ansätze ausprobiert, und obwohl Sie eine Funktion innerhalb einer Gliederungsbox definieren können, sehen Sie sich das Beispiel unten an. Sie können innerhalb des Funktionsaufrufs anscheinend nicht auf eine andere Gliederungsbox verweisen (JMP beschwert sich über eine gelöschte Referenz auf die anderen Gliederungsboxen), und Outline Box() akzeptiert den Sendebefehl <
Names Default To Here( 1 );
w = New Window( "My Window",
A = Outline Box( "Panel Box A",
H List Box( Button Box( "A1" ), Button Box( "A2" ), Button Box( "A3" ) ),
AFunc = Function( {this},
x = this + 2;
Show( x );
);
AFunc( 7 );
),
B = Outline Box( "Panel Box B", H List Box( Button Box( "B1" ), Button Box( "B2" ), Button Box( "B3" ) ), <<CLOSE></CLOSE>
Das obige Skript gibt die folgende Ausgabe aus:

Es generiert eindeutig das gewünschte Fenster und zeigt die Ausgabe der Funktion an, die x=9 ist. Es gelang mir jedoch nicht, eine Funktion innerhalb der Gliederungsbox zu erstellen, die auf den Zustand einer anderen Gliederungsbox zugegriffen und entsprechend dynamisch geschlossen/geöffnet wurde.
Kurz gesagt, die Antwort auf meine obige Frage (und den ursprünglichen Beitrag) ist Nein (oder zumindest noch nicht oder zumindest, dass ich einen Weg dazu gefunden habe). Die lange Antwort macht mehr Spaß und ist Ja ( meist , mit einem Workaround).
Etwas, das dem, was der ursprüngliche Beitrag angefordert hat, sehr nahe kommt, befindet sich im folgenden Code, in dem ich einige "Zurück"- und "Weiter"-Schaltflächen hinzufüge, die das aktuelle Gliederungsfeld schließen und dann das vorherige (zyklische) oder nächste Gliederungsfeld öffnen. Es ist also technisch nicht die gewünschte Lösung, aber es erfüllt (mehr oder weniger) das, was benötigt wird.
Der einzige Nachteil ist, dass Sie nicht vom Öffnen von Gliederungsfeld A zum Öffnen von Gliederungsfeld C überspringen können und das Fenster dynamisch aktualisiert wird, indem alle anderen Gliederungsfelder außer C geschlossen werden. Ich kann mir einige Situationen vorstellen, in denen diese Funktionalität in einem Gliederungsfeld sehr hilfreich wäre. Vielleicht könnte es ein zukünftiges Feature in neuen Versionen von JMP sein?
Wie auch immer, ich fand den ursprünglichen Beitrag interessant und wollte diesen Weg ein wenig untersuchen, bevor ich zu meiner anderen Arbeit zurückkehrte.
Vielen Dank!,
DS
Code für den "Workaround":
Names Default To Here( 1 );
w = New Window( "My Window",
A = Outline Box( "Outline Box A",
V List Box(
H List Box( Button Box( "A1" ), Button Box( "A2" ), Button Box( "A3" ) ),
H List Box(
Button Box( "prev",
<<STYLE>&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/PRE&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/lingo-body&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;lingo-labs id="lingo-labs-438433" slang="en-US"&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;lingo-label&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;Skripting&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/lingo-label&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/lingo-labs&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/lingo-labs&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;</STYLE>Möglicherweise können Sie dies entweder mit XPath oder einer Kombination aus <
Einige Beispiele für den Einstieg:
Names Default To Here(1);
func_prev = Function({this},
((this << Parent) << parent) << Close(1);
(((btn_prev << parent) << parent) /*current*/ << prev sib) << Close(0);
);
func_next = Function({this},
((this << Parent) << parent) << Close(1);
(((this << Parent) << parent) << sib) << Close(0);
);
nw = New Window("My Window",
Outline Box("Panel Box A",
H List Box(Button Box("A1"), Button Box("A2"), Button Box("A3")),
H List Box(
Button Box("prev", <<STYLE>stop();
nw &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt; XPath("//OutlineBox"); //get all outline boxes
nw &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt; XPath("//OutlineBox[@isOpen='true']"); //get all open
nw &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt; XPath("//OutlineBox[@isOpen='false']"); //get all closed
(nw &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt; XPath("//OutlineBox[@isOpen='true']")) &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt; Close(1); //close all open
(nw &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt; XPath("//OutlineBox[@isOpen='false']")) &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt; Close(0); //open all closed
</STYLE>Sie können eine On Close()-Funktion für Outline-Boxen angeben.
Hi @jthi ,
Danke für dein Feedback und deine Gedanken. Der letzte Abschnitt meines Codes, der gepostet wurde, macht im Wesentlichen dasselbe wie Ihre Vorschläge und ermöglicht es dem Benutzer, sich zyklisch durch die verschiedenen Gliederungsfelder zu bewegen. Leider gibt es noch keine Lösung, die den Zustand einer Gliederungsbox dynamisch bewertet und daraufhin die anderen Gliederungsboxen ändert.
Vielen Dank!,
DS