열 목록 상자를 채우는 데 도움이 필요합니다.내 앱 GUI의 일부에는 테이블을 여는 버튼과 해당 테이블의 열로 채워야 하는 열 목록 상자가 있습니다.
스크립팅 인덱스의 수정된 예제에서와 같이 먼저 테이블을 연 다음 Col Lis Box를 생성하면 모든 것이 잘 작동합니다.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
New Window( "Col List Box Example",
lb = Col List Box()
);
lb << Append (dt << Get Column Names);
그러나 테이블을 여는 버튼이 있는 GUI로 창을 만들면, 즉 먼저 Col 목록 상자를 만든 다음 테이블을 열면 작동이 중지됩니다. 이것은 실제 코드의 단순화된 버전이지만 동일한 문제가 있습니다. Col 목록 상자가 열 이름으로 채워지지 않습니다.
Names Default To Here( 1 );
open = Expr(dt = Open( "$SAMPLE_DATA/Big Class.jmp" ); lb << Append (dt << Get Column Names););
gui = Expr(V List Box(btn = Button Box ("OPEN", open), lb = Col List Box()));
New Window( "Col List Box Example",
gui;
);
내가 도대체 뭘 잘못하고있는 겁니까? 어떻게 작동시킬 수 있습니까?
자동화 및 스크립팅품질 및 프로세스 엔지니어링Re: Col 목록 상자를 채우는 데 도움이 필요합니다.예, 이것은 이에 접근하는 유효한 방법입니다. 동일한 결과를 얻는 다른 방법을 보여주기 위해 이것을 약간 다시 작성했습니다.
Names Default To Here( 1 );
LoadTable = function( {dtname}, {dt, lbnew},
dt = open("$SAMPLE_DATA/" || dtname);
lbnew = Col List Box(dt, all);
window:lb << Delete Box;
window:pb << Append( window:lb = lbnew );
win << Bring Window to Front;
);
win = New Window( "Col List Box Example",
vlb = V List Box(
H List Box(
window:clb = List Box( { "Big Class.jmp", "Iris.jmp" } ),
window:btn = Button Box ("OPEN", LoadTable((window:clb << Get Selected)[1]) )
),
window:pb = Panel Box("Column List",
window:lb = Col List Box()
)
)
);Re: Col 목록 상자를 채우는 데 도움이 필요합니다.이 Col 목록 상자를 사용하여 버튼과 다른 Col 목록 상자(모든 플랫폼에서와 같이)를 사용하여 다양한 역할의 열을 캐스팅하기 때문에 다른 설정 등으로 많은 열 목록 상자를 다시 만들어야 합니다. 그래서 범용 함수를 작성했습니다. 그에 대한:
refreshDisplayBox = Function({dt, box, expr},
parent = box << Parent;
box << Delete Box;
parent << Append(box = expr);
Return (box);
);디스플레이 박스를 재생성하기 위해 expr에서 사용되는 경우 여기에 dt가 필요합니다. 함수 외부에서 사용하는 테이블의 핸들에 관계없이 함수로 전달됩니다. 이를 위해 "dt"로 모든 표현식을 작성하는 것을 기억하면 됩니다.
그러면 스크립트는 다음과 같이 표시됩니다.
Names Default To Here( 1 );
refreshDisplayBox = Function({dt, box, expr},
parent = box << Parent;
box << Delete Box;
parent << Append(box = expr);
Return (box);
);
colListExpr = Expr(Col List Box(dt/*use generic dt*/, all));
open = Expr(dtEXT/*different table name*/ = Open( "$SAMPLE_DATA/Big Class.jmp" ); lb = refreshDisplayBox(dtEXT/*pass it into the function*/, lb, colListExpr));
gui = Expr(V List Box(btn = Button Box ("OPEN", open), pb = Panel Box("Column List", lb = Col List Box())));
New Window( "Col List Box Example",
gui;
);
이것이 유효한 접근 방식인지 알려주십시오.
Re: Col 목록 상자를 채우는 데 도움이 필요합니다.좋습니다. ColListBox가 생성되면 현재 데이터 테이블에 연결된 것처럼 보입니다. 그리고 해당 DT의 열만 추가할 수 있습니다.
따라서 동일한 COlLIstBox의 GUI에서 다른 DT의 열을 표시해야 하므로 매번 다시 정의해야 합니다. 이전 것을 삭제하고 대신 새 것을 만드십시오.
이것은 작동하는 것 같습니다. 더 나은 솔루션이 있으면 알려주십시오.
Names Default To Here( 1 );
open = Expr(dt = Open( "$SAMPLE_DATA/Big Class.jmp" ); refreshColList;);
refreshColList = Expr(
(pb << Child) << Delete Box;
pb << Append(lb = Col List Box(dt, all));
);
gui = Expr(V List Box(btn = Button Box ("OPEN", open), pb = Panel Box("Column List", lb = Col List Box())));
New Window( "Col List Box Example",
gui;
);