在 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>腳本回复:在 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>回复:在 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>回复:在 for 循環中創建按鈕腳本我的方法使用 XPath 和 Contains() 有點複雜,但在某些情況下它可能更健壯(如果更改 XPath,您可以將它擴展到 Checkbox 旁邊的其他元素)
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">回复:在 for 循環中創建按鈕腳本</LINGO-SUB><LINGO-BODY id="lingo-body-601493" slang="en-US" mode="NONE"><P>我昨晚回來時在想,“這也可以用 Xpath 和包含來完成”。 Jarmo 的帖子已經在這裡了;我在下面給出的示例非常相似,但是一旦您構建了表,就會使用 Xpath 語句一次分配所有復選框函數。 這正在成為我處理此類事情的最喜歡的方式之一。</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>
回复:在 for 循環中創建按鈕腳本謝謝你! 我需要花更多時間來理解這個,我沒有使用過 set 函數,並且在快速閱讀腳本指南和一些示例後我不太了解其行為。 我確實預見到我將需要這樣的功能的情況,所以我會暫時把它放在腦海中,如果那個時候到來,我會回來。
確認材料中似乎沒有明確說明的一些基本內容:在定義函數時,“this”是否是 JSL 中的預定義術語,它將指向該函數附加到的任何對象? 我看到一些示例在 set 函數參數中使用“this”,但沒有出現在函數定義中的其他任何地方(我大約 60% 確定我使用的是正確的術語)。 基本的數學函數很直觀,例如 MyFn = function ({x,y}, x + y ),但是當我們進入對象時,事情的複雜性似乎很快就會上升。
回复:在 for 循環中創建按鈕腳本它只是與 << Set Function 一起使用時的第一個參數(因為它不必是這,似乎 JMP17 腳本索引正在使用這個盒子例如)。 第一個參數是對設置該函數的特定框的引用。此幫助頁面可能會通過一些示例提供更多信息:
腳本指南 > 顯示樹 > 構建自定義窗口 > 設置函數和設置腳本
此外,對於某些顯示框,您可以將多個參數與 << Set Function 一起使用。 你可以在腳本索引中看到這些(如果你能找到它們,有時可能會有點棘手)
