<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />此查询与我之前的一个查询相关,该查询涉及升级一些脚本以更好地利用 JMP 9 的功能( http://communities.sas.com/message/109908#109908 ),但我认为这不是同一个问题。本质上,它涉及重新绘制包含已从中进行选择的列表框的窗口。在下面的简化示例中,我从列表 A 中进行选择,然后重新创建其中显示列表 A 的窗口,并使用第二个列表框(列表框 B),其内容取决于从 A 中所做的选择。如果用户从列表框 B 中进行选择,则最终选择将出现在其下方的文本框中。如果从列表框 A 中进行选择,则列表框 B 中会提供新的选择列表,用户仍需从中做出最终选择。在 JMP 8 中运行它可以按照我的意愿运行,而在 JMP 9 中运行它会创建一个无限循环。我想我可以明白为什么:我用注释标记的行(当列表框 A 和 B 都出现在窗口中时,突出显示从列表框 A 中使用“<< set selected”属性所做的选择)处理分配就好像我通过点击做出了选择,并采取了相应的行动。显然我可以删除这一行,但如果我这样做,用户将无法看到导致从列表框中进行最终选择的路径 - 他有必要这样做。或者,我可以简单地从一开始就将所有列表框包含在窗口中,而根本不重绘窗口,但在实际版本中,用户一开始并不知道他需要使用多少个列表框 -我真的不想在任何时候在屏幕上显示超出实际需要的内容。
列表_A = { “安迪” , “贝西” , “嘉莉” , “达维娜” , “艾迪” } ;
列表_B = {} ;
Expr_Redraw_NW =表达式(
列表框A =列表框(列表_A ,评估( Expr_Create_List_B )) ;
西北=新窗户( “新窗户” ,
列表框(
面板盒( “第一选择” ,列表框A ) ,
如果(一个选择> 0 ,
面板盒( “第二选择” ,
列表框_B ,
文本框( ” “ ) ,
文本框_答案=文本框( ”” )
)
)
)
) ;
如果(一个选择> 0 ,列表框A <<设置选定的(一个选择)) ; // 这行导致了问题;
西北<<移动窗口( 200 , 200 ) ;
) ;
Expr_Create_List_B =表达式(
字首= (列表框A <<被选中)[ 1 ] ;
展示(字首) ;
一个选择= (列表框A <<获取选定的索引)[ 1 ] ;
展示(一个选择) ;
列表_B = {} ;
为了(我= 1 ,我<= 5 ,我++,
插入(列表_B ,字首|| ” “ ||字符(我))
) ;
列表框_B =列表框(列表_B ,
B_选择= (列表框B <<被选中)[ 1 ] ;
文本框_答案<<设置文本( “选择是:” || B_选择) ;
西北<<重演
) ;
西北<<关闭窗口;
评估( Expr_Redraw_NW ) ;
) ;
列表框_B =列表框(列表_B ,打印( ”” )) ;
文本框_答案=文本框( ”” ) ;
回答= ”” ;
一个选择= 0 ;
评估( Expr_Redraw_NW ) ;
任何人都可以找到一种简单的方法来解决这个问题,而无需大幅调整其工作方式吗?我在三四个脚本中遇到了类似的问题,因此如果可以的话,我希望将任何补救工作保持在最低限度。
非常感谢您收到的任何帮助。