在填充列列錶框方面需要幫助我的應用程序 GUI 的一部分有一個打開表的按鈕,以及一個我需要用該表中的列填充的列列錶框。
如果我先打開表格,然後像在腳本索引中修改的示例中那樣創建 Col Lis 框,一切正常:
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 List Box 沒有填充列名。
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;
);
我究竟做錯了什麼? 我怎樣才能讓它工作?
腳本回复:在填充列列錶框方面需要幫助好的,看起來在創建 ColListBox 時它已連接到當前數據表。 而且您只能從該 DT 添加列。
因此,由於我需要在同一個 COlLIstBox 中的 GUI 中顯示來自不同 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;
);回复:在填充列列錶框方面需要幫助由於我使用此 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;
);
讓我知道這是否是一種有效的方法。