サイズ表示ボックスの取得コマンドがForループで機能しない私は、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 Size"コマンドが機能しません。 スクリプトの残りの部分を実行した後に、それを単一行のコードとして実行した場合にのみ機能します。
それはVLBにテキストボックスを追加することと関係があるに違いありませんが、私はそれが何であるか理解できません。
再:サイズ表示ボックスのコマンドを取得する私のforループでは動作しません私は少し異なるアプローチを取りました - 私はテキストボックスの配列を作成して、それらを別々のループで測定しました。
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 );
);
再:サイズ表示ボックスのコマンドを取得する私のforループでは動作しません皆さんありがとう。 wjlevinによって提案されたWait()コマンドは不可欠でした。 また、gzmorgan0で提案されているように1列のLUBの幅を取得する方が、個々のテキストボックスの幅を取得するよりもエレガントです。 ただし、Waitコマンドに必要な最小の長さは自分の名前リストの長さに依存することがわかりました(長いリスト=長い待機時間)。
再度、感謝します。
再:サイズ表示ボックスのコマンドを取得する私のforループでは動作しませんデフォルトでは、テキストボックスには固定サイズがありません。つまり、固定サイズ(0)が設定されています。 デフォルトではサイズは柔軟で、仕様は-1です。
名前表示の最大サイズを探しているのであれば、VLBを1列の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ループでは動作しませんスクリプトウィンドウから1行ずつ実行してもうまく動かず、スクリプトのブロックを実行してもうまくいかない状況があるときはいつでも(特にある種のループ内で)Waitを追加する必要があると思います( ;
そしてそれは長く待つ必要はありません。これが私がしたことです:
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);
);
それは私にとってトリックでした。