Besoin d'aide pour remplir la zone de liste ColUne partie de l'interface graphique de mon application comporte un bouton qui ouvre une table et une zone de liste de colonnes que je dois remplir avec des colonnes de cette table.
Si j'ouvre d'abord la table, puis que je crée Col Lis Box comme dans cet exemple modifié de Scripting Index, tout fonctionne correctement :
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);
Cependant, si je crée la fenêtre avec l'interface graphique qui a un bouton pour ouvrir la table, c'est-à-dire Je crée d'abord Col List Box, puis j'ouvre la table, elle cesse de fonctionner. Il s'agit d'une version simplifiée du code réel mais qui présente le même problème - Col List Box ne se remplit pas de noms de colonnes.
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;
);
Qu'est-ce que je fais mal? Comment puis-je le faire fonctionner?
Automatisation et scriptIngénierie de la qualité et des procédésRe : Besoin d'aide pour remplir la boîte de liste ColOui, c'est une façon valable d'aborder cela. J'ai réécrit ceci légèrement pour montrer une autre façon d'arriver au même résultat:
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()
)
)
);Re : Besoin d'aide pour remplir la boîte de liste ColDepuis que j'utilise cette boîte de liste de cols pour diffuser des colonnes dans de nombreux rôles différents à l'aide de boutons et d'une autre boîte de liste de cols (comme sur n'importe quelle plate-forme), j'ai besoin de recréer BEAUCOUP de boîtes de liste de cols, avec différents paramètres, etc. J'ai donc écrit une fonction universelle pour ça:
refreshDisplayBox = Function({dt, box, expr},
parent = box << Parent;
box << Delete Box;
parent << Append(box = expr);
Return (box);
);dt est nécessaire ici au cas où il serait utilisé dans expr pour recréer la boîte d'affichage. Il est transmis à la fonction quel que soit le handle de cette table que vous utilisez en dehors de la fonction. N'oubliez pas d'écrire toutes les expressions avec "dt" pour cela.
Ensuite, le script va ressembler à ceci :
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;
);
Faites-moi savoir si c'est une approche valable.
Re : Besoin d'aide pour remplir la boîte de liste ColOk, il semble que lorsque ColListBox est créé, il est connecté à la table de données actuelle. Et vous ne pouvez ajouter que des colonnes à partir de cette DT.
Donc, puisque j'ai besoin d'afficher des colonnes de différents DT dans mon interface graphique dans le même COlLIstBox, je dois le redéfinir à chaque fois. Supprimez l'ancien et créez-en un nouveau à la place.
Cela semble fonctionner, s'il vous plaît laissez-moi savoir s'il existe une meilleure solution:
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;
);