こんにちは、みんな、
コミュニティでサポートを探す必要があるときに、別のテーマのコーディングに取り組んでいましたが、これに出くわしました役職何年も前から、それは私に不思議に思いました、それはできるでしょうか(元の投稿に対する解決策はありませんでした)? アウトラインボックスに、開閉状態に応じて他のアウトラインボックスを開閉する機能を割り当てることはできますか? 別のアウトラインボックスを開いた場合、ウィンドウを自動的に更新して、開いたばかりのアウトラインボックスを除く他のすべてのアウトラインボックスを閉じることができますか?
いくつかの異なるアプローチを試しました。アウトラインボックス内で関数を定義できますが、以下の例を参照してください。 関数呼び出し内で別のアウトラインボックスを参照できないようです(JMPは他のアウトラインボックスへの参照が削除されたことについて文句を言います)。また、Outline Box()はsendコマンド<< Set Function(Function({this}})を受け入れません。 、 脚本))。
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>
上記のスクリプトは次の出力を提供します。

目的のウィンドウを明確に生成し、関数の出力(x = 9)を表示します。 しかし、別のアウトラインボックスの状態にアクセスし、それに応じて動的に閉じたり開いたりする関数をアウトラインボックス内に作成しようとして失敗しました。
要するに、私の上記の質問(および元の投稿)に対する答えは「いいえ」です(または少なくともまだ、または少なくとも私がそうする方法を見つけたということです)。 長い答えはもっと楽しく、はいです(多くの場合、回避策あり)。
元の投稿が要求していたものに非常に近いものは、現在のアウトラインボックスを閉じてから、前(周期的)または次のアウトラインボックスを開く「前」および「次」ボタンボックスを追加する以下のコードにあります。 したがって、技術的には望ましいソリューションではありませんが、必要なことを(多かれ少なかれ)達成します。
唯一の欠点は、アウトラインボックスAを開いてアウトラインボックスCを開くことをスキップできないことです。これにより、Cを除く他のすべてのアウトラインボックスを閉じることでウィンドウが動的に更新されます。 この機能をアウトラインボックスに含めると非常に役立つ状況がいくつか想像できます。 多分それはJMPの新しいリリースの将来の機能かもしれませんか?
とにかく、元の投稿は面白いと思い、他の仕事に戻る前にその道を少し調べたいと思いました。
ありがとう!、
DS
「回避策」のコード:
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;スクリプティング&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>XPathを使用するか、<< Top parent、<< Parent、<< Sib、<< PrevSibなどの組み合わせを使用して実行できる場合があります。
あなたを可能にするためのいくつかの例:
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>アウトラインボックスにOnClose()関数を指定できます。
やあ@jthi 、
あなたのフィードバックと考えをありがとう。 投稿した私のコードの最後のセクションも、基本的にあなたの提案と同じことを行い、ユーザーがさまざまなアウトラインボックスを循環的に移動できるようにします。 残念ながら、アウトラインボックスの状態を動的に評価し、それに応じて他のアウトラインボックスを変更するソリューションはまだありません。
ありがとう!、
DS