需要有关填充列列表框的帮助我的应用程序 GUI 的一部分有一个用于打开表格的按钮,以及一个我需要用该表中的列填充的列列表框。
如果我先打开表,然后创建 Col Lis Box,如脚本索引中的修改示例所示,则一切正常:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
New Window( "Col List Box Example",
lb = Col List Box()
);
lb << Append (dt << Get Column Names);
但是,如果我使用带有打开表格按钮的 GUI 创建窗口,即 我先创建 Col 列表框,然后打开表格,它停止工作。 这是真实代码的简化版本,但它有同样的问题 - Col 列表框不填充列名称。
Names Default To Here( 1 );
open = Expr(dt = Open( "$SAMPLE_DATA/Big Class.jmp" ); lb << Append (dt << Get Column Names););
gui = Expr(V List Box(btn = Button Box ("OPEN", open), lb = Col List Box()));
New Window( "Col List Box Example",
gui;
);
我究竟做错了什么? 我怎样才能让它发挥作用?
自动化和脚本编写质量和工艺工程回复:需要帮助填充列列表框是的,这是解决这个问题的有效方法。 我稍微重写了这个,以展示另一种获得相同结果的方法:
Names Default To Here( 1 );
LoadTable = function( {dtname}, {dt, lbnew},
dt = open("$SAMPLE_DATA/" || dtname);
lbnew = Col List Box(dt, all);
window:lb << Delete Box;
window:pb << Append( window:lb = lbnew );
win << Bring Window to Front;
);
win = New Window( "Col List Box Example",
vlb = V List Box(
H List Box(
window:clb = List Box( { "Big Class.jmp", "Iris.jmp" } ),
window:btn = Button Box ("OPEN", LoadTable((window:clb << Get Selected)[1]) )
),
window:pb = Panel Box("Column List",
window:lb = Col List Box()
)
)
);回复:需要帮助填充列列表框由于我使用此 Col 列表框使用按钮和另一个 Col 列表框(如在任何平台中一样)将列转换为许多不同的角色,因此我需要重新创建许多具有不同设置等的 col 列表框。所以我编写了一个通用函数为了那个原因:
refreshDisplayBox = Function({dt, box, expr},
parent = box << Parent;
box << Delete Box;
parent << Append(box = expr);
Return (box);
);如果在 expr 中使用 dt 来重新创建显示框,则此处需要 dt。 无论您在函数外部使用该表的哪个句柄,它都会传递到函数中。 只需记住用“dt”编写所有表达式即可。
然后脚本将如下所示:
Names Default To Here( 1 );
refreshDisplayBox = Function({dt, box, expr},
parent = box << Parent;
box << Delete Box;
parent << Append(box = expr);
Return (box);
);
colListExpr = Expr(Col List Box(dt/*use generic dt*/, all));
open = Expr(dtEXT/*different table name*/ = Open( "$SAMPLE_DATA/Big Class.jmp" ); lb = refreshDisplayBox(dtEXT/*pass it into the function*/, lb, colListExpr));
gui = Expr(V List Box(btn = Button Box ("OPEN", open), pb = Panel Box("Column List", lb = Col List Box())));
New Window( "Col List Box Example",
gui;
);
让我知道这是否是有效的方法。
回复:需要帮助填充列列表框好的,看起来 ColListBox 在创建时就连接到了当前的数据表。 并且您只能从该 DT 添加列。
因此,由于我需要在 GUI 中的同一个 COlLIstBox 中显示来自不同 DT 的列,因此每次都需要重新定义它。 删除旧的并创建一个新的。
这似乎有效,请告诉我是否有更好的解决方案:
Names Default To Here( 1 );
open = Expr(dt = Open( "$SAMPLE_DATA/Big Class.jmp" ); refreshColList;);
refreshColList = Expr(
(pb << Child) << Delete Box;
pb << Append(lb = Col List Box(dt, all));
);
gui = Expr(V List Box(btn = Button Box ("OPEN", open), pb = Panel Box("Column List", lb = Col List Box())));
New Window( "Col List Box Example",
gui;
);