Erstellen Sie je nach Variable eine unterschiedliche Anzahl von TextfeldernLieber JMPer,
Ich versuche mehrere Textfelder in einem neuen Fenster zu erstellen, die Anzahl der Textfelder ist eine Variable
Dann habe ich ein Schiebereglerfeld und muss beim Verschieben der Leiste Text für die Textfelder festlegen, die ich gerade erstellt habe
Ich denke, eine for-Schleife sollte die Lösung sein, aber ich schaffe es einfach nicht
colname = {"Name", "Height", "Weight"}; //it's a list of column names from previous code, number of items is not fixed
min = 0;
max = 10;
Value = 0;
eval(evalexpr(
nw = New Window( "parameter setting",
Panel Box( "parameter setting",
tb1 = text box(char(colname[1]) || ": " || char(:expr(nameexpr(ascolumn(colname[1])))[1])),
tb2 = text box(char(colname[2]) || ": " || char(:expr(nameexpr(ascolumn(colname[2])))[1])),
tb3 = text box(char(colname[3]) || ": " || char(:expr(nameexpr(ascolumn(colname[3])))[1])),
//.
//.
//.
//.
//.
//.etc
//lines for tb should determined by N itmes(colname)
Valuetb = Text Box( "Value: " || Char( Value )),
sb = Slider Box(
min, max, Value,
Valuetb << set text( "Value: " || Char( Value ));
:Parameter A << set each value(Value);
tb1 << set text(char(colname[1]) || ": " || char(:expr(nameexpr(ascolumn(colname[1])))[1]));
tb2 << set text(char(colname[2]) || ": " || char(:expr(nameexpr(ascolumn(colname[2])))[1]));
tb3 << set text(char(colname[3]) || ": " || char(:expr(nameexpr(ascolumn(colname[3])))[1]))
) // when I move the slider box, values of all columns in colname will be changed, so I do set text for all columns in colname
)
)
))
Automatisierung und SkripterstellungBetreff: Erstellen Sie je nach Variable eine unterschiedliche Anzahl von TextfeldernDanke, ich habe es verstanden.
Außerdem habe ich erfahren, dass Sie eval insert verwenden, um meine ursprünglichen Long-Long-Funktionen zu ersetzen.
Vielen Dank immer für Ihr freundliches Teilen
Betreff: Erstellen Sie je nach Variable eine unterschiedliche Anzahl von TextfeldernEs gibt Ihrem Skript eine zusätzliche (und relativ einfache) Trennungsebene und es ist einfacher, diese kleinen Codeblöcke zu ändern als das riesige neue Fenster (Sie haben noch kein großes neues Fenster, aber sie können schnell sehr lang werden). Manchmal kann es durch den „Verlust“ der Referenzen zu Problemen kommen, aber ich denke, es lohnt sich trotzdem.
Betreff: Erstellen Sie je nach Variable eine unterschiedliche Anzahl von TextfeldernDanke Jarmo, das ist genau das, was ich brauche
Darf ich fragen, warum Sie das Skript für die Slider-Box lieber außerhalb der Slider-Box verschieben möchten?
Betreff: Erstellen Sie je nach Variable eine unterschiedliche Anzahl von TextfeldernSpeichern Sie Referenzen in der Liste, erstellen Sie den „Kollektor“ für Textfelder außerhalb des neuen Fensters und ich würde auch das Skript für die Slider-Box außerhalb der Slider-Box in eine separate Funktion/einen separaten Ausdruck verschieben.
Ist das was du brauchst?
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
colnames = {"name", "height", "weight"}; //it's a list of column names from previous code, number of items is not fixed
min = 0;
max = 10;
Value = 0;
lub = Lineup Box(N Col(1));
tbs = {};
For Each({colname}, colnames,
text_to_add = Eval Insert("^colname^: ^dt[1, colname]^");
lub << Append(tb = Text Box(text_to_add));
Insert into(tbs, tb);
);
If(N Items(tbs) != N Items(colnames),
Throw("!Fatal error");
);
update_tbs = Expr(
For Each({colname, idx}, colnames,
text_to_set = Eval Insert("^colname^: ^dt[1, colname]^");
tbs[idx] << Set Text(text_to_set);
);
);
nw = New Window( "parameter setting",
Panel Box( "parameter setting",
lub,
Valuetb = Text Box( "Value: " || Char( Value )),
sb = Slider Box(
min, max, Value,
Valuetb << set text( "Value: " || Char( Value ));
:age << set each value(Value);
update_tbs;
)
);
);Betreff: Erstellen Sie je nach Variable eine unterschiedliche Anzahl von TextfeldernDanke Jim, aber das ist nicht das, was ich brauche, es ist nicht nötig, (colname[1]) [1] durch value zu ersetzen
Was ich brauche, ist, dass das Skript Folgendes tun kann, wenn die Spaltennamenliste mehr Elemente enthält, zum Beispiel: 5:
tb1 =
tb2 =
tb3=
tb4 =
tb5=
Wenn es 10 Elemente hat, dann mache tb1 ~ tb10
Betreff: Erstellen Sie je nach Variable eine unterschiedliche Anzahl von TextfeldernIch bin mir nicht sicher, ob Sie das wollen. Durch meine Änderungen an Ihrem Skript ändern sich die Werte in den Textfeldern im Anzeigefenster, wenn Sie den Schieberegler bewegen
names default to here(1);
dt = open("$SAMPLE_DATA/big class.jmp");
colname = {"Name", "Height", "Weight"}; //it's a list of column names from previous code, number of items is not fixed
min = 1;
max = 10;
Value = 1;
Eval(
Eval Expr(
nw = New Window( "parameter setting",
Panel Box( "parameter setting",
tb1 = Text Box(
Char( colname[1] ) || ": " || Char( :expr( Name Expr( As Column( colname[1] ) ) )[1] )
),
tb2 = Text Box(
Char( colname[2] ) || ": " || Char( :expr( Name Expr( As Column( colname[2] ) ) )[1] )
),
tb3 = Text Box(
Char( colname[3] ) || ": " || Char( :expr( Name Expr( As Column( colname[3] ) ) )[1] )
),
//.
//.
//.
//.
//.
//.etc
//lines for tb should determined by N itmes(colname)
Valuetb = Text Box( "Value: " || Char( Value ) ),
sb = Slider Box(
min,
max,
Value,
Valuetb << set text( "Value: " || Char( Value ) );
//:Parameter A << set each value( Value );
tb1 << set text(
Char( colname[1] ) || ": " ||char(column( colname[1] )[value] ));
tb2 << set text(
Char( colname[2] ) || ": " ||char(column( colname[2] )[value] ));
tb3 << set text(
Char( colname[3] ) || ": " ||char(column( colname[3] )[value] ));
) // when I move the slider box, values of all columns in colname will be changed, so I do set text for all columns in colname
)
)
)
);