CIAO. Mi chiedo se esista un metodo conveniente per una casella di pulsanti per sapere in qualche modo dove si trova all'interno di una casella di formazione. Le mie specifiche:
JMP Pro16.2.0
Ho uno script che crea una finestra con una casella LineUp. In ogni cella è presente una casella di pulsanti in cui desidero eseguire un'azione diversa, in base alla colonna in cui appare il pulsante. Per esempio:
Names Default to Here(1);
list = {"cat", "dog", "mouse", "kangaroo", "sloth"};
list2 = {"meow", "bark", "squeak", "hop", "zzz"};
lub = LineUpBox(NCol(2), Spacing(5));
For(i=1, i<=NItems(list), i++,
tb = TextBox(list[i]);
bb = ButtonBox(list2[i],
//Insert code for the button to somehow identify which button it is within lub.
Speak(list2[i])
);
lub << Append(tb);
lub << Append(bb);
);
New Window("Test", lub);Se eseguo lo script così com'è, ottengo:

Ma quando clicco su uno qualsiasi dei pulsanti, ottengo l'errore:
"Intervallo di pedice nell'accesso o nella valutazione di 'list2[ /*###*/i]' , list2[/*###*/I]"
Comprendo questo errore perché non è possibile per la casella del pulsante richiamare il valore di "i" quando viene eseguita. La mia domanda: esiste un metodo che potrei usare che consenta alla casella del pulsante di "autoidentificarsi" dove si trova nella casella di allineamento quando viene premuta e utilizzare quel valore come indice list2 nello script del pulsante?
Attualmente sto utilizzando JSL Quotes e il comando Substitute per creare i pulsanti. In tal caso scrivo il contenuto del ciclo For come citazione JSL e lo sostituisco con il valore di i, quindi Eval(Parse()). Questo però è goffo e mi chiedo se esiste un modo migliore, come un comando "bb << Ottieni posizione" o "bb << Conta fratelli". Questi comandi ovviamente non esistono, ma forse esiste un'altra tecnica?
Grazie!
Grazie! Questa è una soluzione ancora più elegante.
Come risposta alla domanda originale dell'OP, la risposta è sì ed è piuttosto semplice.Ecco un esempio:
Names Default to Here(1);
list = {"cat", "dog", "mouse", "kangaroo", "sloth"};
list2 = {"meow", "bark", "squeak", "hop", "zzz"};
lub = LineUpBox(NCol(2), Spacing(5));
For(i=1, i<=NItems(list), i++,
tb = TextBox(list[i]);
bb = ButtonBox(list2[i], <<SET function=""></SET>Ciao Jarmo. La combinazione Eval Insert/Eval Expr/Parse è simile alla combinazione JSLQuote/Substitute/Parse che sto attualmente utilizzando. Ma le altre soluzioni che hai fornito erano esattamente il tipo di cosa che stavo cercando. Grazie!
Non conosco alcun metodo diretto per ottenere la posizione, ma potresti calcolare la "posizione" oppure inserire le informazioni con cui premere il pulsante Inserisci un'espressione in un'altra utilizzando Eval Insert, Eval Expr, Parse e Substitute . Puoi anche usare << ottieni nome pulsante per ottenere il testo del pulsante; oppure << prev sib con il riferimento corretto per ottenere il testo nella casella di testo; potresti "nascondere" il testo nel tooltip del pulsante (o dell'indice)... e ci sono molte altre opzioni, a seconda di cosa vuoi fare e come vuoi farlo.
Visualizza altro...