Hai bisogno di aiuto per compilare la casella di riepilogo ColParte della GUI della mia app ha un pulsante che apre una tabella e una casella di riepilogo Col che devo popolare con le colonne di quella tabella.
Se prima apro la tabella e poi creo Col Lis Box come in questo esempio modificato da Scripting Index, tutto funziona bene:
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);
Tuttavia, se creo la finestra con la GUI che ha il pulsante per aprire la tabella, ad es Creo prima Col List Box e poi apro la tabella, smette di funzionare. Questa è una versione semplificata del codice reale ma presenta lo stesso problema: la casella di riepilogo Col non viene popolata con i nomi delle colonne.
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;
);
Che cosa sto facendo di sbagliato? Come posso farlo funzionare?
SceneggiaturaRe: Serve aiuto per compilare la casella di riepilogo ColOk, sembra che quando viene creato ColListBox sia connesso alla tabella di dati corrente. E puoi solo aggiungere colonne da quel DT.
Quindi, poiché ho bisogno di mostrare colonne di DT diversi nella mia GUI nella stessa COlLIstBox, devo ridefinirlo ogni volta. Elimina quello vecchio e creane uno nuovo.
Sembra funzionare, per favore fatemi sapere se c'è una soluzione migliore:
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;
);Re: Serve aiuto per compilare la casella di riepilogo ColPoiché utilizzo questa casella di riepilogo Col per trasmettere colonne in molti ruoli diversi utilizzando pulsanti e altre caselle di riepilogo Col (come in qualsiasi piattaforma), ho bisogno di ricreare MOLTE caselle di riepilogo col, con impostazioni diverse ecc. Quindi ho scritto una funzione universale per quello:
refreshDisplayBox = Function({dt, box, expr},
parent = box << Parent;
box << Delete Box;
parent << Append(box = expr);
Return (box);
);dt è necessario qui nel caso in cui venga utilizzato in expr per ricreare la casella di visualizzazione. Viene passato alla funzione indipendentemente dall'handle per quella tabella che stai utilizzando al di fuori della funzione. Devi solo ricordarti di scrivere tutte le espressioni con "dt" per quello.
Quindi lo script sarà simile a questo:
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;
);
Fammi sapere se questo è un approccio valido.