루프 내에서 버튼을 생성하는 방법은 무엇입니까?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />루프 내에서 버튼을 생성하려고 합니다(각 열에 대해 하나의 버튼). 버튼이 스크립트를 실행할 때 항상 마지막으로 생성된 버튼의 스크립트를 실행한다는 점을 제외하면 버튼은 올바르게 생성됩니다. 버튼 상자 개체가 생성될 때 전달된 스크립트가 아닙니다.
따라서 버튼은 스크립트에 대한 참조만 가져오는 것으로 보이며 스크립트가 변경되면 버튼의 기능이 변경됩니다. 스크립트 배열로 해결 방법을 고려해 보았지만 문제는 단추 개체에 대한 인수(예: 배열에서 실행할 스크립트 인덱스)를 전달할 수 없다는 것입니다.
질문: jsl에서 다른 스크립트/동작으로 루프 내에서 버튼을 만들 수 있는 방법이 있습니까? 예를 들어 단추 개체가 생성될 때 인수/데이터를 단추 개체에 전달하는 방법이 있습니까???
내 코드:
NamesDefaultToHere(1);
dt = 현재 데이터 테이블();
dtCols = dt << 열 이름 가져오기(숫자, 연속);
// strParam에 대한 분포를 표시하는 표현식
Expr_ShowDistribution = Expr(
새 창(문자(strParam),
분포(
지속적인 배포(
Column( strParam ) // 매개변수를 지정합니다.
),
SendToReport(
Dispatch( {}, "Distribution", OutlineBox, Set Title( "" ) ),
)
)
)
);
// 메인 윈도우
새 창("주 창",
ob = OutlineBox("버튼",
TextBox("디버깅 버튼", 글꼴 스타일 설정("굵게"))
);
);
// 로그로만 출력되는 버튼 생성
BB = 버튼 상자("ClickMe", Show("클릭"));
ob << 추가(BB);
// 분포를 표시하기 위한 버튼 생성
For( i = 1, i <= NItems(dtCols), i++,
Expr_ButtonAction = 대체(NameExpr(Expr_ShowDistribution),
Expr(strParam), Eval(Char(dtCols) )) );
Show(NameExpr(Expr_ButtonAction)); // 버튼마다 표현이 다릅니다.
BB = 버튼 상자( Char(dtCols ), Eval(Expr_ButtonAction));
ob << 추가(BB);
);
Re: 루프 내에서 버튼을 생성하는 방법은 무엇입니까?귀하의 예는 루프 내의 마지막 두 행, 즉
비비 = 버튼 박스 ( 숯 ( dtCols [ 나 ]) , 평가 ( Expr_ButtonAction )) ;
산부인과 << 추가 ( 비비 ) ;
로 대체된다
평가 ( 평가 만료 ( 산부인과 << 추가 ( 버튼 박스 ( 숯 ( dtCols [ 나 ] ) , 만료 ( 이름 만료 ( Expr_ButtonAction ) ) ) ) ) ) ;
가장 확실한 해결책은 아닙니다. 여기서는 PMroz의 예와 같은 "문자열 조작" 접근 방식이 더 간단하다고 생각합니다.
Re: 루프 내에서 버튼을 생성하는 방법은 무엇입니까?좋은 생각이지만 구현되지 않았습니다.지금은 버튼 이름을 연관 배열의 키로 사용하는 것이 좋습니다.
Re: 루프 내에서 버튼을 생성하는 방법은 무엇입니까?그만큼 함수 설정() 예를 들어 연관 배열에 키-값 쌍을 추가하여 일부 사용자 데이터를 버튼에 첨부할 수 있다면 접근 방식이 더 유용할 것 같습니다.가능합니까?
Re: 루프 내에서 버튼을 생성하는 방법은 무엇입니까?버튼 스크립트는 버튼을 참조하는 "this" 매개변수가 있는 함수일 수 있습니다. 즉, 버튼은 이름이나 부모 상자를 찾을 수 있습니다.
새 창( "예제", v = V 목록 상자() );
f = 함수( {this}, Show( this << getbuttonname ) );
For( i = 1, i < 10, i++,
v << append( Button Box( "number " || Char( i ), Set Function( f ) ) )
);

"기능 설정" 매개변수는 이 작업을 수행하는 데 핵심입니다.귀하의 예에서 버튼 이름이 열 이름일 수 있다고 생각합니다.예제의 VListBox 이름은 "v"이므로 단추 상자를 추가할 수 있습니다.
Re: 루프 내에서 버튼을 생성하는 방법은 무엇입니까?다음은 작동하는 구현입니다.분포 표현식을 함수로 변경한 다음 작동하도록 evalinsert, parse, eval을 가지고 놀아야 했습니다.
쇼배포 = 기능 ({ column_name } , { 기본 로컬 } ,
dist_expr = 평가 (
"\[Distribution( 명목 분포( column(:name("^column_name^")) ) )]\" ) ;
평가 ( 구문 분석 ( dist_expr )) ;
) ;
// 메인 윈도우
새창 ( "메인 창" ,
산부인과 = 아웃라인박스 ( "버튼" ,
텍스트 상자 ( "디버깅 버튼" , 글꼴 스타일 설정 ( "용감한" ))
) ;
) ;
// 로그로만 출력되는 버튼 생성
비비 = 버튼 박스 ( "클릭 해주세요" , 보여주다 ( "클릭" )) ;
산부인과 << 추가 ( 비비 ) ;
dt = 열려 있는 ( "$sample_data\Big Class.jmp" ) ;
dtcols = dt << 열 이름 가져오기 ( 끈 ) ;
~을 위한 ( 나 = 1 , 나 <= 나이트 ( dtcols ) , 나 ++,
button_expr = 평가 ( "\[one_button = 버튼 상자("^dtcols ^", showdistribution("^dtcols ^"))]\" ) ;
평가 ( 구문 분석 ( button_expr )) ;
산부인과 << 추가 ( 원버튼 ) ;
) ;