가져 오기 크기 표시 상자 명령 내 루프에서 작동하지 않습니다V 목록 상자의 각 텍스트 상자를 검사하고 각각의 크기를 반환해야하는 For 루프가 있습니다. 어떤 이유로 그것은 작동하지 않습니다 :
Names Default to Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
win = New Window("Temp",
VLB = VListBox();
);
names = Column("Name") << Get Values;
//Write to window
For(j=1, j<=NItems(names), j++,
tb = TextBox(names[j]);
VLB << Append(tb);
text = VLB[j] << Get Text; //This works...
width = (VLB[j] << Get Size); //...but this just returns 0
Show(j, text, width);
);
//Nor does this work when I run with the script above, but does work if I run as a single line of code afterwards:
width = (VLB[1] << Get Size);
Show(width);앞에서 설명한 것처럼 "<< Get Text"명령은 제대로 작동하지만 "<< Get Size"명령은 작동하지 않습니다. 또한 전체 루프를 실행하면 For 루프 외부에서도 "<< Get Get"명령이 작동하지 않습니다. 스크립트의 나머지 부분을 실행 한 후에 한 줄의 코드로 실행 한 경우에만 작동합니다.
텍스트 박스를 VLB에 추가하는 것과 관련이 있어야하지만, 그것이 무엇인지 이해할 수는 없습니다.
다시 : 크기 표시 상자 명령 내 루프에서 작동하지 않습니다 가져 오기약간 다른 접근법을 택했습니다. 텍스트 상자의 배열을 만들어 별도의 루프에서 측정했습니다.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
win = New Window( "Temp", VLB = V List Box() );
names = Column( "Name" ) << Get Values;
tb = {};
//Write to window
For( i = 1, i <= N Items( names ), i++,
tb[i] = Text Box( names[i] );
VLB << Append( tb[i] );
);
For( i = 1, i <= N Items( names ), i++,
text = tb[i] << Get Text;
width = tb[i] << Get Size;
Show( i, text, width );
);
다시 : 크기 표시 상자 명령 내 루프에서 작동하지 않습니다 가져 오기모두에게 감사드립니다. wjlevin이 제안한 Wait () 명령은 필수적이었습니다. 또한 gzmorgan0에서 제안한 것처럼 단일 열 LUB의 너비를 얻는 것이 개별 텍스트 상자의 너비를 얻는 것보다 더 우아합니다. 하지만, Wait 명령에 필요한 최소 길이가 내 이름 목록의 길이에 달려 있다는 것을 알았지 만 (긴 목록 = 긴 대기 시간).
다시 한번 감사드립니다.
다시 : 크기 표시 상자 명령 내 루프에서 작동하지 않습니다 가져 오기기본적으로 텍스트 상자에는 고정 크기가 없으므로 고정 크기 (0)가 설정됩니다. 기본적으로 크기는 유연하며 사양은 -1입니다.
이름 표시의 최대 크기를 찾고 있다면 VLB에 단일 열 LineUpBox (이름을 LUB로 변경)를 만들고 루프의 끝에 컨테이너의 너비를 가져 오려고 할 수 있습니다.
또한, @wjlevin 잠깐만 (0). 희망이 도움이
Names Default to Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
win = New Window("Temp",
LUB = LineUpBox(ncol(1));
);
names = Column("Name") << Get Values;
//Write to window
For(j=1, j<=NItems(names), j++,
tb = TextBox(names[j]);
LUB << Append(tb);
);
For(j=1, j<=NItems(names), j++,
text = LUB[j] << Get Text; //This works...
width = LUB[j] << Get Width; //...but this just returns -1 meaning it is not fixed
Show(j, text, width);
);
wait(0);
MaxWidth = LUB << get width;
Show(MaxWidth);
내 글꼴 크기 MaxWidth = 66 픽셀.
다시 : 크기 표시 상자 명령 내 루프에서 작동하지 않습니다 가져 오기내가 스크립트 윈도우에서 줄 단위로 실행하고 스크립트 블록을 실행할 때 작동하지 않는 상황이 발생할 때마다 (특히 어떤 종류의 루프 내에서) 나는 기다림을 추가 할 필요가 있다고 생각한다. );
그리고 오래 기다릴 필요도 없습니다. 여기 내가 한 일이있다.
For(j=1, j<=NItems(names), j++,
tb = TextBox(names[j]);
VLB << Append(tb);
text = VLB[j] << Get Text; //This works...
wait(.01);
width = (VLB[j] << Get Size); //...but this just returns 0
Show(j, text, width);
);
그것은 저를위한 간계를했다.