创建行状态处理程序你好,
我有一个 JSL 代码用于附加行选择的按钮框。问题是,即使只选择了 1 行,它也会继续附加重复的框。我只想为“n”个选定行附加“n”个框。如果没有选择任何行,那么它应该删除表格框中的所有框
只需选择 1 行即可添加 10 个框。

Names Default To Here( 1 );
dt2 = Open( "$SAMPLE_DATA/Iris.jmp", invisible );
New Window( "",
H List Box(
Graph Builder(
Size( 653, 571 ),
Show Control Panel( 0 ),
Variables( X( :Sepal length ), Y( :Sepal width ), Overlay( :Species ) ),
Elements( Points( X, Y, Legend( 6 ) ) ),
SendToReport(
Dispatch( {}, "Sepal length", ScaleBox, {Min( 4.02451368343195 ), Max( 8.24903846153846 ), Inc( 1 ), Minor Ticks( 0 )} ),
Dispatch( {}, "Sepal width", ScaleBox, {Min( 1.75 ), Max( 5.00400457665904 ), Inc( 1 ), Minor Ticks( 0 )} )
)
),
Spacer Box( size( 10, 0 ) ),
Outline Box( "Petal Species",
Spacer Box( size( 0, 10 ) ),
Scroll Box(
size( 350, 150 ),
disoi = Table Box(
colbox = Col Box( "Species" ),
//imvinum = Number Col Edit Box( "iMINum", {} ),
)
),
disoi << set selectable rows( 0 ),
)
)
);
f = Function( {this},
dt2 << begin data update;
list = {};
checnro = N Items( dt2 << getselectedrows );
For( i = 1, i <= checnro, i++,
Insert Into( list, dt2:Species[dt2 << getselectedrows][i] );
);
For Each( {wascc, idx}, list,
//For( k = 1, k <= N Items( list ), k++,
colbox << append(
Eval(
Parse(
"ex" || Char( idx ) ||
" = Button Box( wascc
,
New Window( \!"Wikipedia\!",
<<TYPE></TYPE><LINGO-LABS id="lingo-labs-755955" slang="en-US" mode="CREATE"><LINGO-LABEL>自动化和脚本</LINGO-LABEL></LINGO-LABS>回复:制作行状态处理程序谢谢 Jarmo!
这正是我想要的。
我们可以重新排列表格框中的列吗?没关系,我已经找到了
回复:制作行状态处理程序您必须以某种方式移除旧盒子。
我不确定这是否能达到你的期望,但我确实对你的脚本做了相当大的修改
Names Default To Here(1);
dt2 = Open("$SAMPLE_DATA/Iris.jmp", invisible);
dt2 << Clear Select;
nw = New Window("",
H List Box(
Graph Builder(
Size(653, 571),
Show Control Panel(0),
Variables(X(:Sepal length), Y(:Sepal width), Overlay(:Species)),
Elements(Points(X, Y, Legend(6)))
),
Spacer Box(size(10, 0)),
Outline Box("Petal Species",
Spacer Box(size(0, 10)),
Scroll Box(
size(350, 150),
tb_species = Table Box(,<< set selectable rows(0))
)
)
)
);
add_buttons = Function({a},
selrows = dt2 << get selected rows;
sel_species = Associative Array(dt2[selrows, "Species"]) << get keys;
new_colbox = Col Box("Species");
For Each({cur_species, idx}, sel_species,
new_colbox << append(
Button Box(cur_species
, << Set Function(function({this},
New Window("Wikipedia", Web Browser Box("https://en.wikipedia.org/wiki/Iris_" || (this << get button name)));
))
, << Underline Style(1),
)
)
);
Try(tb_species[ColBox(1)] << Delete Box());
tb_species << append(new_colbox);
);
rs = dt2 << make row state handler(add_buttons);
回复:制作行状态处理程序如果我需要 f 函数来选择更多点,我可以避免无限循环吗?
rs = dt << Make Row State Handler( f );
f = Function( {a},
r = dt << Get Selected Rows;
If( N Items( r ) > 0,
dt << Go To( :lot );
dt << Select Matching Cells();
);
);
回复:制作行状态处理程序一种选择是添加一些额外的检查:
- 已选择新行(并且可能已选择新值)
- 并且选择不是通过<<选择匹配单元格
虽然它仍然可能比较笨重,但这可能是你能找到的最好的方法了。更好的选择可能是使用(全局)数据过滤器。