需要有關填充列列錶框的幫助我的應用程序 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;
);