Benötigen Sie Hilfe beim Ausfüllen des SpaltenlistenfeldsEin Teil der GUI meiner App hat eine Schaltfläche, die eine Tabelle öffnet, und ein Spaltenlistenfeld, das ich mit Spalten aus dieser Tabelle füllen muss.
Wenn ich zuerst die Tabelle öffne und dann Col Lis Box wie in diesem modifizierten Beispiel aus Scripting Index erstelle, funktioniert alles einwandfrei:
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);
Wenn ich jedoch das Fenster mit GUI erstelle, das über eine Schaltfläche zum Öffnen der Tabelle verfügt, dh Ich erstelle zuerst Col List Box und öffne dann die Tabelle, es funktioniert nicht mehr. Dies ist eine vereinfachte Version von echtem Code, aber es gibt das gleiche Problem – Col List Box wird nicht mit Spaltennamen gefüllt.
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;
);
Was mache ich falsch? Wie kann ich es zum Laufen bringen?
SkripterstellungBetreff: Benötigen Sie Hilfe beim Ausfüllen des SpaltenlistenfeldsOk, es sieht so aus, als wäre ColListBox beim Erstellen mit der aktuellen Datentabelle verbunden. Und Sie können nur Spalten aus diesem DT hinzufügen.
Da ich also Spalten aus verschiedenen DTs in meiner GUI in derselben COlLIstBox anzeigen muss, muss ich sie jedes Mal neu definieren. Löschen Sie die alte und erstellen Sie stattdessen eine neue.
Das scheint zu funktionieren, bitte lassen Sie mich wissen, ob es eine bessere Lösung gibt:
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;
);Betreff: Benötigen Sie Hilfe beim Ausfüllen des SpaltenlistenfeldsDa ich dieses Col-Listenfeld verwende, um Spalten in vielen verschiedenen Rollen mit Schaltflächen und anderen Col-Listenfeldern (wie auf jeder Plattform) umzuwandeln, muss ich VIELE col-Listenfelder mit unterschiedlichen Einstellungen usw. neu erstellen. Also habe ich eine universelle Funktion geschrieben dafür:
refreshDisplayBox = Function({dt, box, expr},
parent = box << Parent;
box << Delete Box;
parent << Append(box = expr);
Return (box);
);dt wird hier benötigt, falls es in expr verwendet wird, um die Anzeigebox neu zu erstellen. Es wird an die Funktion übergeben, unabhängig davon, welches Handle für diese Tabelle Sie außerhalb der Funktion verwenden. Denken Sie nur daran, dafür alle Ausdrücke mit "dt" zu schreiben.
Dann sieht das Skript so aus:
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;
);
Lassen Sie mich wissen, ob dies ein gültiger Ansatz ist.