こんにちは。 ボタンボックスがラインナップボックス内のどこにあるのかを知るための便利な方法はあるだろうかと考えています。 私の詳細:
JMPプロ16.2.0
LineUp ボックスを含むウィンドウを作成するスクリプトがあります。 各セルには、ボタンが表示される列に基づいて異なるアクションを実行するボタン ボックスがあります。 例えば:
Names Default to Here(1);
list = {"cat", "dog", "mouse", "kangaroo", "sloth"};
list2 = {"meow", "bark", "squeak", "hop", "zzz"};
lub = LineUpBox(NCol(2), Spacing(5));
For(i=1, i<=NItems(list), i++,
tb = TextBox(list[i]);
bb = ButtonBox(list2[i],
//Insert code for the button to somehow identify which button it is within lub.
Speak(list2[i])
);
lub << Append(tb);
lub << Append(bb);
);
New Window("Test", lub);スクリプトをそのまま実行すると、次の結果が得られます。

しかし、いずれかのボタンをクリックすると、次のエラーが表示されます。
「'list2[ /*###*/i]' のアクセスまたは評価における添え字範囲、list2[/*###*/I]」
実行時にボタン ボックスが「i」の値を呼び出す方法がないため、このエラーは理解できます。 私の質問: ボタン ボックスが押されたときに、ラインアップ ボックス内のどこにあるかを「自己識別」し、その値をボタン スクリプトの list2 インデックスとして使用できるようにする方法はありますか?
現在、JSL QuotesとSubstituteコマンドを使用してボタンを作成しています。 その場合、For ループの内容を JSL Quote として書き込み、i の値を代入し、次に Eval(Parse()) を代入します。 ただし、これは扱いにくいので、「bb << Get Location」または「bb << Count Siblings」コマンドのような、もっと良い方法はないかと考えています。 もちろんこれらのコマンドは存在しませんが、もしかしたら別のテクニックがあるのでしょうか?
ありがとう!
ありがとう! これはさらに洗練されたソリューションです。
OPの元の質問に対する答えとしては、答えは「はい」であり、それはかなり単純です。以下に例を示します。
Names Default to Here(1);
list = {"cat", "dog", "mouse", "kangaroo", "sloth"};
list2 = {"meow", "bark", "squeak", "hop", "zzz"};
lub = LineUpBox(NCol(2), Spacing(5));
For(i=1, i<=NItems(list), i++,
tb = TextBox(list[i]);
bb = ButtonBox(list2[i], <<SET function=""></SET>こんにちは、ジャーモ。 Eval Insert/Eval Expr/Parse コンボは、現在使用している JSLQuote/Substitute/Parse コンボに似ています。 しかし、あなたが提供した他のソリューションは、まさに私が探していたものでした。 ありがとう!
位置を取得する直接的な方法はわかりませんが、「位置」を計算することも、ボタンに知識を挿入することもできます。 Eval Insert、Eval Expr、Parse、Substitute を使用して、ある式を別の式に挿入する。 << get button name を使用してボタンのテキストを取得することもできます。または、テキスト ボックス内のテキストを取得するための正しい参照を持つ << prev sib。ボタン (またはインデックス) のツールチップのテキストを「非表示」にすることもできます。やりたいことややりたい方法に応じて、さらに多くのオプションがあります。
もっと見る...