for ループでボタン スクリプトを作成する可変の行数を持つテーブル ボックスを生成しようとしています。 各行には、リスト内の対応する変数に対して何らかの機能を実行するボタンが必要です。
現在の問題: for ループ内のスクリプトが、期待どおりに eval expr を解釈していません。 各チェックボックスに添付された結果のスクリプトは、ボタン 1、2、または 3 が押されたことを出力する必要があります。 代わりに、常に 4 と表示されます。 最終的な目標は、チェックボックスがクリックされたときに UserText[i] に対して操作を行うことです。
私が間違っていることを説明できる人はいますか? ありがとう!
おまけの質問: チェック ボックスを使用しているのは、ボタン ボックスよりも小さく、ボタン ボックスのサイズを変更できないように見えるためです。 理想的には、小さなクリック可能なアイコンです。 完全なボタンの代わりに小さなクリック可能な「x」を作成するフレンドリーな方法はありますか?
JMP バージョン: 16
Names Default To Here( 1 );
UserText = {"default 1", "default 2", "default 3"};
win2 = New Window( "Select files",
tb = Table Box(
Col Box( "Text", {} ),
Col Box( "Button", {} ),
),
tb << set row borders(1);
);
//for loop to add a number of rows with a small button next to each one
For( i = 1, i <= N Items( UserText ), i++,
tb << add row(
{Text Box( UserText[i], <<SET width=""></SET>スクリプティングRe: for ループでボタン スクリプトを作成するこんにちは、
あなたはとても親しかった。
以下のように Eval ( EvalExpr ( ) ) を使用して tb << add row () ステートメント全体をラップすると、目的の動作が得られます。
//for loop to add a number of rows with a small button next to each one
For( i = 1, i <= N Items( UserText ), i++,
eval(evalexpr(
tb << add row(
{Text Box( UserText[i], <<SET width=""></SET>Re: for ループでボタン スクリプトを作成するこれは、これを処理する私の古い学校の方法です
Names Default To Here( 1 );
UserText = {"default 1", "default 2", "default 3"};
win2 = New Window( "Select files",
tb = Table Box(
Col Box( "Text", {} ),
Col Box( "Button", {} ),
),
tb << set row borders(1);
);
//for loop to add a number of rows with a small button next to each one
For( i = 1, i <= N Items( UserText ), i++,
tb << add row(
{Text Box( UserText[i], <<SET width=""></SET>Re: for ループでボタン スクリプトを作成する私のメソッドは、XPath と Contains() を使用すると少し複雑になりますが、場合によってはより堅牢になる可能性があります (XPath を変更すると、チェックボックス以外の要素に拡張できます)。
Names Default To Here(1);
UserText = {"default 1", "default 2", "default 3"};
win2 = New Window("Select files",
tb = Table Box(Col Box("Text", {}), Col Box("Button", {}), Col Box("Third", {})),
tb << set row borders(1)
);
expr_tablebox_get_checkbox_idx = Expr(
row_idx = Contains((this << parent) << XPath("//CheckBoxBox"), this);
);
expr_tablebox_get_column_idx = Expr(
col_idx = Contains(((this << parent) << parent) << Get Names, (this << parent) << get heading)
);
expr_check_box = Expr(
expr_tablebox_get_checkbox_idx;
expr_tablebox_get_column_idx;
Show(row_idx, col_idx);
);
For Each({txt}, UserText,
tb << Add Row(
{Text Box(txt, << Set Width),
cb = Check Box({""}, << Set Function(function({this},
expr_check_box
))
),
cb = Check Box({""}, << Set Function(function({this},
expr_check_box
))
)
};
);
);
</CODE>この方法を使用すると、式を呼び出す場所に応じて式が正しく評価されるという問題が発生する可能性があるため、最初に試す方法ではありません。</P>
<P> </P></LINGO-BODY><LINGO-SUB id="lingo-sub-601493" slang="en-US" mode="NONE">Re: for ループでボタン スクリプトを作成する</LINGO-SUB><LINGO-BODY id="lingo-body-601493" slang="en-US" mode="NONE"><P>昨夜、「これはXpathとcontainsでも実行できる」と考えていたので、戻ってきました。 Jarmo の投稿はすでにここにありました。以下に示した例は非常によく似ていますが、テーブルを作成したら、Xpath ステートメントを使用してすべてのチェックボックス機能を一度に割り当てます。 これは、この種のことを処理するための私のお気に入りの方法の 1 つになりつつあります。</P>
<P> </P>
<PRE><CODE class=" language-jsl">Names Default To Here( 1 );
UserText = {"default 1", "default 2", "default 3"};
win2 = New Window( "Select files",
tb = Table Box( Col Box( "Text", {} ), Col Box( "Button", {} ), << set row borders(1) );
);
//add rows with a small button next to each one
For each ( { txt, i }, UserText,
tb << add row( {Text Box( txt, <<SET width=""></SET>
Re: for ループでボタン スクリプトを作成するありがとう! これを理解するにはもう少し時間が必要です。私は set 関数を使用したことがなく、スクリプト ガイドといくつかの例をざっと読んだだけでは動作がよくわかりません。 このような機能が必要になる状況が将来予測されるので、このことを少し頭の片隅に置き、その時が来たら戻ってきます。
資料に明示的に記載されていないように見える基本的なことを確認するには:関数を定義するとき、「これ」はJSLで事前に定義された用語であり、関数が接続されているオブジェクトを指しますか? set 関数の引数で「this」を使用し、関数定義の他の場所に表示されていない例をいくつか見ます (正しい用語を使用していると約 60% 確信しています)。 MyFn = function ({x,y}, x + y ) などの基本的な数学関数は直観的ですが、オブジェクトに入ると、物事は非常に急速に複雑になるように見えます。
Re: for ループでボタン スクリプトを作成する<< Set Function で使用する場合は、最初のパラメーターにすぎません (そうである必要はないため)。これ、JMP17スクリプトインデックスが使用しているようですこのボックス例えば)。 そして、その最初の引数は、その関数が設定されている特定のボックスへの参照です。このヘルプ ページには、いくつかの例を含む詳細情報が記載されています。
スクリプト ガイド > ツリーの表示 > カスタム ウィンドウの作成 > 関数の設定とスクリプトの設定
また、一部のディスプレイ ボックスでは、 << Set Function で複数のパラメーターを使用できる場合があります。 これらはスクリプティング インデックスで確認できます (見つけた場合、少し難しい場合があります)。
