행 상태 핸들러 만들기안녕,
행 선택을 위해 단추 상자를 추가하는 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>Re: 행 상태 핸들러 만들기고마워요 자르모!
이것이 바로 내가 원하는 것입니다.
테이블 상자의 열 순서를 변경할 수 있나요? 넵 알아냈어요
Re: 행 상태 핸들러 만들기어떻게든 오래된 상자를 제거해야 할 겁니다.
이것이 당신이 원하는 대로 작동하는지 확실하지 않지만, 나는 당신의 스크립트를 상당히 많이 수정했습니다.
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);
Re: 행 상태 핸들러 만들기더 많은 포인트를 선택하기 위해 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();
);
);
Re: 행 상태 핸들러 만들기한 가지 방법은 몇 가지 추가 검사를 추가하는 것입니다.
- 새로운 행이 선택되었습니다(그리고 새로운 값이 선택되었을 수도 있음)
- 그리고 선택은 << 일치하는 셀 선택으로 이루어지지 않았습니다.
여전히 다소 불편할 수 있지만, 최선의 선택일 가능성이 높습니다. 선택 항목에 (전역) 데이터 필터를 사용하는 것이 더 나을 수 있습니다.