Salut. Je me demande s'il existe une méthode pratique permettant à une zone de boutons de savoir d'une manière ou d'une autre où elle se trouve dans une zone d'alignement. Mes spécificités :
JMP Pro 16.2.0
J'ai un script qui crée une fenêtre avec une boîte LineUp. Dans chaque cellule, il y a une boîte à boutons dans laquelle je souhaite effectuer une action différente, en fonction de la colonne dans laquelle le bouton apparaît. Par exemple:
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);Si j'exécute le script tel quel, j'obtiens :

Mais lorsque je clique sur l'un des boutons, j'obtiens l'erreur :
"Plage d'indice lors de l'accès ou de l'évaluation de 'list2[ /*###*/i]' , list2[/*###*/I]"
Je comprends cette erreur car il n'y a aucun moyen pour la boîte à boutons de rappeler la valeur de "i" lors de son exécution. Ma question : existe-t-il une méthode que je pourrais utiliser qui permettrait à la zone de bouton de "s'auto-identifier" où elle se trouve dans la zone d'alignement lorsqu'elle est enfoncée et d'utiliser cette valeur comme index list2 dans le script du bouton ?
J'utilise actuellement JSL Quotes et la commande Substitute pour créer les boutons. Dans ce cas, j'écris le contenu de la boucle For sous forme de citation JSL et je remplace la valeur de i, puis Eval(Parse()). C'est cependant maladroit, et je me demande s'il existe un meilleur moyen, comme une commande "bb << Get Location" ou "bb << Count Siblings". Ces commandes n'existent bien sûr pas, mais peut-être existe-t-il une autre technique ?
Merci!
Merci! C'est une solution encore plus élégante.
En réponse à la question initiale du PO, la réponse est oui et c'est plutôt simple.Voici un exemple:
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>Salut Jarmo. Le combo Eval Insert/Eval Expr/Parse est similaire au combo JSLQuote/Substitute/Parse que j'utilise actuellement. Mais les autres solutions que vous avez proposées correspondaient exactement au genre de chose que je recherchais. Merci!
Je ne connais aucune méthode directe pour obtenir l'emplacement, mais vous pouvez calculer "l'emplacement" ou insérer les connaissances sur le bouton avec Insérez une expression dans une autre à l'aide d'Eval Insert, Eval Expr, Parse et Substitute . Vous pouvez également utiliser << obtenir le nom du bouton pour obtenir le texte du bouton ; ou << prev sib avec la référence correcte pour obtenir le texte dans la zone de texte ; vous pouvez "masquer" le texte dans l'info-bulle du bouton (ou de l'index)... et il existe de nombreuses autres options, selon ce que vous voulez faire et comment vous voulez le faire.
Voir plus...