根據變數建立不同數量的文字框親愛的 JMPer,
我嘗試在新視窗中建立多個文字框,文字框的數量是一個變數
然後我有一個滑塊框,我需要在移動滑塊時為剛剛創建的那些文本框設置文本
我想 for 迴圈應該是解決方案,但我就是無法完成它
colname = {"Name", "Height", "Weight"}; //it's a list of column names from previous code, number of items is not fixed
min = 0;
max = 10;
Value = 0;
eval(evalexpr(
nw = New Window( "parameter setting",
Panel Box( "parameter setting",
tb1 = text box(char(colname[1]) || ": " || char(:expr(nameexpr(ascolumn(colname[1])))[1])),
tb2 = text box(char(colname[2]) || ": " || char(:expr(nameexpr(ascolumn(colname[2])))[1])),
tb3 = text box(char(colname[3]) || ": " || char(:expr(nameexpr(ascolumn(colname[3])))[1])),
//.
//.
//.
//.
//.
//.etc
//lines for tb should determined by N itmes(colname)
Valuetb = Text Box( "Value: " || Char( Value )),
sb = Slider Box(
min, max, Value,
Valuetb << set text( "Value: " || Char( Value ));
:Parameter A << set each value(Value);
tb1 << set text(char(colname[1]) || ": " || char(:expr(nameexpr(ascolumn(colname[1])))[1]));
tb2 << set text(char(colname[2]) || ": " || char(:expr(nameexpr(ascolumn(colname[2])))[1]));
tb3 << set text(char(colname[3]) || ": " || char(:expr(nameexpr(ascolumn(colname[3])))[1]))
) // when I move the slider box, values of all columns in colname will be changed, so I do set text for all columns in colname
)
)
))
自動化和腳本編寫回覆:根據變數建立不同數量的文字框謝謝你,我明白了。
我還了解到您使用 eval insert 來替換我原來的 long long 函數。
始終感謝您的善意分享
回覆:根據變數建立不同數量的文字框它為您的腳本提供了額外的(並且相當容易的)分離層,並且修改這些小代碼塊比巨大的新窗口更容易(您還沒有大的新窗口,但它們很快就會變得非常長)。有時,它可能會因“丟失”參考文獻而導致一些問題,但我認為這仍然是值得的。
回覆:根據變數建立不同數量的文字框謝謝 Jarmo,這正是我需要的
請問為什麼您希望將滑桿框的腳本移到滑桿框之外?
回覆:根據變數建立不同數量的文字框儲存對清單的引用,為新視窗外部的文字方塊建立“收集器”,我還將滑桿框外部的滑桿框腳本移到單獨的函數/表達式中。
這是你需要的嗎?
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
colnames = {"name", "height", "weight"}; //it's a list of column names from previous code, number of items is not fixed
min = 0;
max = 10;
Value = 0;
lub = Lineup Box(N Col(1));
tbs = {};
For Each({colname}, colnames,
text_to_add = Eval Insert("^colname^: ^dt[1, colname]^");
lub << Append(tb = Text Box(text_to_add));
Insert into(tbs, tb);
);
If(N Items(tbs) != N Items(colnames),
Throw("!Fatal error");
);
update_tbs = Expr(
For Each({colname, idx}, colnames,
text_to_set = Eval Insert("^colname^: ^dt[1, colname]^");
tbs[idx] << Set Text(text_to_set);
);
);
nw = New Window( "parameter setting",
Panel Box( "parameter setting",
lub,
Valuetb = Text Box( "Value: " || Char( Value )),
sb = Slider Box(
min, max, Value,
Valuetb << set text( "Value: " || Char( Value ));
:age << set each value(Value);
update_tbs;
)
);
);回覆:根據變數建立不同數量的文字框謝謝吉姆,但這不是我需要的,不需要將 (colname[1]) [1] 替換為 value
我需要的是,當 colname 清單中有更多項目時,例如:5,腳本可以執行以下操作:
tb1=
tb2=
TB3=
TB4=
TB5=
當有 10 個項目時,則執行 tb1 ~ tb10
回覆:根據變數建立不同數量的文字框我不確定這就是你想要的。當您移動滑桿時,我對腳本的修改會變更顯示視窗中文字方塊的值
names default to here(1);
dt = open("$SAMPLE_DATA/big class.jmp");
colname = {"Name", "Height", "Weight"}; //it's a list of column names from previous code, number of items is not fixed
min = 1;
max = 10;
Value = 1;
Eval(
Eval Expr(
nw = New Window( "parameter setting",
Panel Box( "parameter setting",
tb1 = Text Box(
Char( colname[1] ) || ": " || Char( :expr( Name Expr( As Column( colname[1] ) ) )[1] )
),
tb2 = Text Box(
Char( colname[2] ) || ": " || Char( :expr( Name Expr( As Column( colname[2] ) ) )[1] )
),
tb3 = Text Box(
Char( colname[3] ) || ": " || Char( :expr( Name Expr( As Column( colname[3] ) ) )[1] )
),
//.
//.
//.
//.
//.
//.etc
//lines for tb should determined by N itmes(colname)
Valuetb = Text Box( "Value: " || Char( Value ) ),
sb = Slider Box(
min,
max,
Value,
Valuetb << set text( "Value: " || Char( Value ) );
//:Parameter A << set each value( Value );
tb1 << set text(
Char( colname[1] ) || ": " ||char(column( colname[1] )[value] ));
tb2 << set text(
Char( colname[2] ) || ": " ||char(column( colname[2] )[value] ));
tb3 << set text(
Char( colname[3] ) || ": " ||char(column( colname[3] )[value] ));
) // when I move the slider box, values of all columns in colname will be changed, so I do set text for all columns in colname
)
)
)
);