Benötigen Sie Hilfe beim Ausfüllen des Col-Listenfelds?Ein Teil der GUI meiner App verfügt über 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 dem 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 einer GUI erstelle, die über eine Schaltfläche zum Öffnen der Tabelle verfügt, d. h Ich erstelle zuerst ein Col List Box und öffne dann die Tabelle, es funktioniert nicht mehr. Dies ist eine vereinfachte Version von echtem Code, aber es besteht das gleiche Problem: Das Spaltenlistenfeld 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 dafür sorgen, dass es funktioniert?
Automatisierung und SkripterstellungQualitäts- und VerfahrenstechnikBetreff: Brauche Hilfe beim Ausfüllen des Col-List-FeldsJa, das ist ein gültiger Ansatz. Ich habe dies etwas umgeschrieben, um einen anderen Weg zu zeigen, wie man zum gleichen Ergebnis kommt:
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()
)
)
);Betreff: Brauche Hilfe beim Ausfüllen des Col-List-FeldsDa ich diese Col-List-Box verwende, um Spalten mithilfe von Schaltflächen und anderen Col-List-Boxen (wie auf jeder Plattform) in viele verschiedene Rollen umzuwandeln, muss ich VIELE Col-List-Boxen mit unterschiedlichen Einstellungen usw. neu erstellen. Deshalb 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, 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.
Betreff: Brauche Hilfe beim Ausfüllen des Col-List-FeldsOk, 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 das alte und erstellen Sie stattdessen ein neues.
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;
);