안녕. 버튼 상자가 라인업 상자 내 어디에 있는지 알 수 있는 편리한 방법이 있는지 궁금합니다. 내 세부사항:
JMP 프로 16.2.0
LineUp 상자가 있는 창을 만드는 스크립트가 있습니다. 각 셀에는 버튼이 나타나는 열에 따라 다른 작업을 수행하려는 버튼 상자가 있습니다. 예를 들어:
Names Default to Here(1);
list = {"cat", "dog", "mouse", "kangaroo", "sloth"};
list2 = {"meow", "bark", "squeak", "hop", "zzz"};
lub = LineUpBox(NCol(2), Spacing(5));
For(i=1, i<=NItems(list), i++,
tb = TextBox(list[i]);
bb = ButtonBox(list2[i],
//Insert code for the button to somehow identify which button it is within lub.
Speak(list2[i])
);
lub << Append(tb);
lub << Append(bb);
);
New Window("Test", lub);스크립트를 있는 그대로 실행하면 다음과 같은 결과를 얻습니다.

하지만 버튼 중 하나를 클릭하면 오류가 발생합니다.
"'list2[ /*###*/i]' , list2[/*###*/I]의 액세스 또는 평가 시 아래 첨자 범위"
버튼 상자가 실행될 때 "i" 값을 기억할 수 있는 방법이 없기 때문에 이 오류를 이해합니다. 내 질문: 버튼 상자를 눌렀을 때 라인 업 상자의 위치를 "자체 식별"하고 해당 값을 버튼 스크립트의 list2 인덱스로 사용할 수 있는 방법이 있습니까?
현재 JSL Quotes와 Substitute 명령을 사용하여 버튼을 만들고 있습니다. 이 경우 For 루프의 내용을 JSL Quote로 작성하고 i 값, Eval(Parse()) 값으로 대체합니다. 하지만 이것은 투박하며 "bb << Get Location" 또는 "bb << Count Siblings" 명령과 같은 더 좋은 방법이 있는지 궁금합니다. 물론 이러한 명령은 존재하지 않습니다. 그러나 아마도 다른 기술이 있을까요?
감사해요!
감사해요! 이것은 훨씬 더 우아한 솔루션입니다.
OP의 원래 질문에 대한 대답은 '예'이며 다소 간단합니다.예는 다음과 같습니다.
Names Default to Here(1);
list = {"cat", "dog", "mouse", "kangaroo", "sloth"};
list2 = {"meow", "bark", "squeak", "hop", "zzz"};
lub = LineUpBox(NCol(2), Spacing(5));
For(i=1, i<=NItems(list), i++,
tb = TextBox(list[i]);
bb = ButtonBox(list2[i], <<SET function=""></SET>안녕하세요 자르모입니다. Eval Insert/Eval Expr/Parse Combo는 현재 사용 중인 JSLQuote/Substitute/Parse Combo와 유사합니다. 하지만 귀하가 제공한 다른 솔루션은 제가 찾던 것과 정확히 같았습니다. 감사해요!
위치를 얻는 직접적인 방법은 모르지만 "위치"를 계산하거나 버튼에 지식을 삽입할 수 있습니다. Eval Insert, Eval Expr, Parse 및 Substitute를 사용하여 하나의 표현식을 다른 표현식에 삽입합니다. . << 버튼 이름 가져오기를 사용하여 버튼 텍스트를 가져올 수도 있습니다. 또는 << prev sib를 올바른 참조로 사용하여 텍스트 상자에 텍스트를 가져옵니다. 버튼(또는 색인)의 도구 설명에 있는 텍스트를 "숨길" 수 있습니다... 그리고 원하는 작업과 수행 방법에 따라 더 많은 옵션이 있습니다.
더보기...