<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Cette requête est liée à une de mes précédentes requêtes concernant la mise à niveau de certains scripts pour mieux utiliser les fonctionnalités de JMP 9 ( http://communities.sas.com/message/109908#109908 ), mais ce n'est pas tout à fait le même problème, je pense.Il s'agit essentiellement de redessiner une fenêtre contenant une list box dans laquelle une sélection a déjà été effectuée.Dans l'exemple simplifié suivant, j'effectue une sélection dans la liste A, puis je recrée la fenêtre dans laquelle la liste A apparaît avec une deuxième zone de liste (liste
dont le contenu dépend de la sélection effectuée dans A.Si l'utilisateur effectue une sélection dans la zone de liste B, la sélection finale apparaît dans la zone de texte en dessous.Si une sélection est effectuée dans la List Box A, une nouvelle liste de choix est fournie dans la List Box B à partir de laquelle l'utilisateur doit encore effectuer une sélection finale.L'exécuter dans JMP 8 fonctionne comme je le souhaite, tandis que l'exécuter dans JMP 9 crée une boucle infinie.Je pense comprendre pourquoi : la ligne que j'ai marquée d'un commentaire (qui met en évidence la sélection effectuée dans la List Box A avec une propriété "<< set selected" lorsque les deux list box A et B apparaissent dans la fenêtre) traite l'affectation comme si j'avais fait cette sélection en cliquant dessus et j'agis en conséquence.Évidemment, je pourrais simplement supprimer cette ligne, mais si je fais cela, l'utilisateur ne peut pas voir le chemin qui a conduit à la sélection finale dans les zones de liste - et il est nécessaire qu'il le fasse.Alternativement, je pourrais simplement inclure toutes les zones de liste dans la fenêtre depuis le début et ne pas redessiner la fenêtre du tout, mais dans la version réelle, l'utilisateur ne sait pas au départ combien de zones de liste il devra utiliser - et je ne veux pas vraiment afficher à l'écran plus de choses à la fois que ce qui est réellement nécessaire.
Liste_A = { "Andy" , "Bessie" , "Carrie" , "Davina" , "Eddie" } ;
Liste_B = {} ;
Expr_Redraw_NW = expression (
Liste_Box_A = Zone de liste ( Liste_A , évaluer ( Expr_Create_List_B )) ;
NO = nouvelle fenetre ( "Nouvelle fenetre" ,
HListeBoîte (
Panneau électrique ( "Premier choix" , Liste_Box_A ) ,
si ( Un choix > 0 ,
Panneau électrique ( "Second choix" ,
Liste_Box_B ,
Zone de texte ( " " ) ,
TextBox_Answer = Zone de texte ( "" )
)
)
)
) ;
si ( Un choix > 0 , Liste_Box_A << définir la sélection ( Un choix )) ; // Cette ligne provoque le problème ;
NO << déplacer la fenêtre ( 200 , 200 ) ;
) ;
Expr_Create_List_B = expression (
Préfixe = ( Liste_Box_A << être sélectionné )[ 1 ] ;
montrer ( Préfixe ) ;
Un choix = ( Liste_Box_A << obtenir les indices sélectionnés )[ 1 ] ;
montrer ( Un choix ) ;
Liste_B = {} ;
pour ( je = 1 , je <= 5 , je ++,
insérer dans ( Liste_B , Préfixe || " " || carboniser ( je ))
) ;
Liste_Box_B = Zone de liste ( Liste_B ,
B_Choix = ( Liste_Box_B << être sélectionné )[ 1 ] ;
TextBox_Answer << Définir le texte ( « La sélection est : » || B_Choix ) ;
NO << réafficher
) ;
NO << Fermer la fenêtre ;
évaluer ( Expr_Redraw_NW ) ;
) ;
Liste_Box_B = Zone de liste ( Liste_B , imprimer ( "" )) ;
TextBox_Answer = Zone de texte ( "" ) ;
Répondre = "" ;
Un choix = 0 ;
évaluer ( Expr_Redraw_NW ) ;
Quelqu'un peut-il voir un moyen simple de s'en sortir sans impliquer une restructuration substantielle de son fonctionnement ?J'ai un problème similaire dans trois ou quatre scripts, j'aimerais donc réduire au minimum les travaux de correction si je le peux.
Un grand merci pour toute aide reçue.