JSL:在动态显示框中恢复 PanelBox 大小<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Panel Box() 对象会随着内容的扩展而自动调整其大小。然而,反过来似乎并非如此。按下右单选按钮 在下面的示例脚本中,随着复选框描述符的展开,窗口会被拉伸。重新选择左单选按钮会产生更短的描述符,但面板框(和窗口)保持其展开状态。
如何强制面板框恢复到它的原始大小?或者在这方面是否有另一种“更智能”的展示盒类型?
我试图将原始大小保存在一个变量中(使用 pb1 << Get Size)并在重新选择单选按钮 1 时应用它,但 Panel Box() 似乎无法识别 Set Size() 消息。
字符串=
{ “案例1:低剂量真的很长的描述真的很长的描述真的很长的描述” ,
“案例2:高剂量真长描述真长描述真长描述”
} ;
短字符串=评估列表( {剩下(字符串[ 1 ] , 6 ) ,剩下(字符串[ 2 ] , 6 )} ) ;
PB1 =表达式(面板盒( ,
hlb1 = V 列表框(结核病=文本框( “选择案例” ) ,
CB =复选框(短字符串) ,
vlb1 = V 列表框(
间隔盒() ,
H 列表框(
RB2 =收音机盒(
“显示名称” ,
CB <<删除;
vlb1 <<前置( CB =复选框(短字符串))) ,
RB1 =收音机盒(
“显示说明” ,
CB <<删除;
vlb1 <<前置( CB =复选框(字符串)))))))))
) ;
PB2 =表达式(
面板盒( ,
V 列表框(
按钮盒( “跑” ) ,
按钮盒( “取消” , <<关闭窗口) ,
间隔盒()
))) ;
新窗户( “例子” ,
高位= H 列表框( PB1 , PB2 )
) ;
RB2 <<团体( RB1 ) ;
JSL:在动态显示框中恢复 PanelBox 大小谢谢戴夫!有用。我使用 set content size() 而不是 set window size() 探索了一个类似的解决方案。这些命令似乎是可以互换的,至少在这个例子中是这样。
还有一个小怪癖。当在两个单选按钮之间切换时,窗口设置每两次或三次失败。然后窗口变得比它的内容小。这个问题出现在你和我的解决方案中。我认为它导致代码执行中的一些异步,例如在 prepend() 完成之前获取窗口大小。然而,在 rb1 按钮脚本中插入 Wait(0.01) 似乎消除了特殊行为。请参阅下面的摘录。
也许这是特定于机器的,所以奇怪的事情可能不会发生在每个人身上。我在速度非常快的 Mac Pro 上运行 JMP 9.02。
...如果 (NItems(ss_large)==0, Wait(0.01);
ss_large = nw << 获取窗口大小
,
nw << 设置窗口大小(ss_large[1],ss_large[2])
)...
再次感谢!
回复:JSL:在动态显示框中恢复 PanelBox 大小我不认为问题出在面板盒上——你会遇到同样的问题,你移除了面板盒。
正是窗口本身增加了其大小以容纳内容。
因此,如果您将调整大小应用于窗口,则您提出的解决方案有效。 但是,一旦窗口调整大小,它就不会调整自身大小,因此您需要控制调整大小以使其变大和变小。
这段代码似乎有效......
str = {"case 1: 低剂量真的很长的描述真的很长的描述真的很长的描述",
"case 2: 高剂量真的很长的描述真的很长的描述真的很长的描述"};
short_str = Eval List( {Left( str[1], 6 ), Left( str[2], 6 )} );
ss_small = {};
ss_large = {};
pb1 = Expr(
边框框( ,
hlb1 = V 列表框(
tb = 文本框(“选择案例”),
cb = 复选框(short_str),
vlb1 = V 列表框(
间隔盒(),
H 列表框(
rb2 = 单选框(
"显示名称",
cb<<删除;
vlb1 << 前置(
cb = 复选框(
短字符串
)
);
nw << 设置窗口大小(ss_small[1],ss_small[2])
),
rb1 = 单选框(
"显示说明",
cb<<删除;
vlb1 << prepend( cb = Check Box( str ) );
如果 (NItems(ss_large)==0,
ss_large = nw << 获取窗口大小
,
nw << 设置窗口大小(ss_large[1],ss_large[2])
)
)
)
)
)
)
);
pb2 = Expr( Panel Box( , V List Box( Button Box( "Run" ), Button Box( "Cancel", <
净重 = New Window( "示例", hlb = H 列表框( pb1, pb2 ) );
rb2 << 组( rb1 );
ss_small = nw <<获取窗口大小;
戴夫