Caselle di riepilogo: la proprietà "imposta selezionato".<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Questa domanda è correlata a una mia precedente riguardante l'aggiornamento di alcuni script per utilizzare meglio le funzionalità di JMP 9 ( http://communities.sas.com/message/109908#109908 ), ma non è proprio lo stesso problema, credo.Si tratta essenzialmente di ridisegnare una finestra contenente una casella di riepilogo dalla quale è già stata effettuata una selezione.Nel seguente esempio semplificato, effettuo una selezione dall'Elenco A, ricreando quindi la finestra in cui appare l'Elenco A con una seconda casella di riepilogo (List Box
il cui contenuto dipende dalla selezione effettuata da A.Se l'utente seleziona dalla casella di riepilogo B, la selezione finale verrà visualizzata nella casella di testo sottostante.Se viene effettuata una selezione dalla casella di riepilogo A, nella casella di riepilogo B viene fornito un nuovo elenco di scelte da cui l'utente deve ancora effettuare una selezione finale.L'esecuzione in JMP 8 funziona come voglio, mentre l'esecuzione in JMP 9 crea un ciclo infinito.Penso di poter capire perché: la riga che ho contrassegnato con un commento (che evidenzia la selezione effettuata dalla casella di riepilogo A con una proprietà "<< set selezionato" quando entrambe le caselle di riepilogo A e B appaiono nella finestra) tratta l'assegnazione come se avessi effettuato quella selezione cliccandoci sopra, e agissi di conseguenza.Ovviamente potrei semplicemente rimuovere questa riga, ma se lo faccio, l'utente non potrà vedere il percorso che ha portato alla selezione finale dalle caselle di riepilogo - ed è necessario che lo veda.In alternativa potrei semplicemente includere tutte le caselle di elenco nella finestra dall'inizio e non ridisegnare affatto la finestra, ma nella versione reale l'utente non sa all'inizio quante caselle di elenco dovrà utilizzare - e non voglio davvero mostrare sullo schermo più di quanto sia effettivamente necessario in ogni momento.
Elenco_A = { "Andy" , "Bessie" , "Carrie" , "Davina" , "Eddie" } ;
Elenco_B = {} ;
Espr_Ridisegna_NW = espressione (
Elenco_Box_A = Casella di riepilogo ( Elenco_A , val ( Espr_Crea_Lista_B )) ;
NO = nuova finestra ( "Nuova finestra" ,
HListBox (
Scatola del pannello ( "Prima scelta" , Elenco_Box_A ) ,
Se ( Una scelta > 0 ,
Scatola del pannello ( "Seconda scelta" ,
List_Box_B ,
Casella di testo ( " " ) ,
TextBox_Risposta = Casella di testo ( "" )
)
)
)
) ;
Se ( Una scelta > 0 , Elenco_Box_A << insieme selezionato ( Una scelta )) ; // Questa riga causa il problema;
NO << spostare la finestra ( 200 , 200 ) ;
) ;
Espr_Crea_List_B = espressione (
Prefisso = ( Elenco_Box_A << essere selezionato )[ 1 ] ;
spettacolo ( Prefisso ) ;
Una scelta = ( Elenco_Box_A << ottenere gli indici selezionati )[ 1 ] ;
spettacolo ( Una scelta ) ;
Elenco_B = {} ;
per ( io = 1 , io <= 5 , io ++,
inserire ( Elenco_B , Prefisso || " " || car ( io ))
) ;
List_Box_B = Casella di riepilogo ( Elenco_B ,
B_Scelta = ( List_Box_B << essere selezionato )[ 1 ] ;
TextBox_Risposta << impostare il testo ( "La selezione è: " || B_Scelta ) ;
NO << riproporre
) ;
NO << chiudi la finestra ;
eval ( Espr_Ridisegna_NW ) ;
) ;
List_Box_B = Casella di riepilogo ( Elenco_B , stampa ( "" )) ;
TextBox_Risposta = Casella di testo ( "" ) ;
Risposta = "" ;
Una scelta = 0 ;
eval ( Espr_Ridisegna_NW ) ;
Qualcuno riesce a vedere una via d'uscita semplice che non implichi una ristrutturazione sostanziale del modo in cui funziona?Ho riscontrato un problema simile in tre o quattro script, quindi vorrei ridurre al minimo qualsiasi lavoro correttivo, se possibile.
Molte grazie per qualsiasi aiuto ricevuto.
Caselle di riepilogo: la proprietà "imposta selezionati".Non ho trovato una soluzione semplicissima. Un modo per eliminare il rischio di cadere nella trappola ricorsiva è avere una comunicazione unidirezionale tra le espressioni chiave.
Di seguito è riportato un esempio che elimina/aggiunge in modo condizionale la casella del pannello che contiene List_Box_B, invece di ridisegnare l'intera finestra. Pertanto la List Box A non necessita di essere aggiornata e tutto il lavoro di ridisegno viene chiamato dallo script in List_Box_A senza "feedback" da Expr_Create_List_B. Potrebbe non essere così semplice come speravi, ma sembra funzionare in JMP9.
Lista_A = { "Andy" , "Bessie" , "Carrie" , "Davina" , "Eddie" } ;
Lista_B = {} ;
Espr_Ridisegna_NW = Espr (
List_Box_A = Casella di riepilogo (
Elenco_A ,
Valutazione ( Expr_Create_List_B ) ;
Prova ( Panel_Box_B << cancella ) ;
Se ( A_Scelta > 0 ,
HL << Aggiungi ( Eval ( Expr_Panel_Box_B ) ) ;
A_Scelta = 0 ; // per abilitare il ripristino facendo clic tenendo premuto il tasto Ctrl sulla selezione
);
);
Se ( A_Scelta == 0 ,
NO = Nuova finestra ( "Nuova finestra" ,
HL = H Casella di riepilogo (
Casella del pannello ( "Prima scelta" , List_Box_A ) ,
Se ( A_Scelta > 0 ,
Valutazione ( Expr_Panel_Box_B )
)
)
)
);
NO << sposta la finestra ( 200 , 200 ) ;
);
Espr_Create_List_B = Espr (
Tentativo (
Prefisso = ( List_Box_A << ottieni selezionato )[ 1 ] ;
Mostra ( Prefisso ) ;
A_Choice = ( List_Box_A << ottieni gli indici selezionati )[ 1 ] ;
Mostra ( A_Scelta ) ;
Lista_B = {} ;
Per ( io = 1 , io <= 5 , io ++,
Inserisci in ( Lista_B , Prefisso || " " || Carattere ( i ) )
);
List_Box_B = Casella di riepilogo (
Elenco_B ,
B_Choice = ( List_Box_B << ottieni selezionato )[ 1 ] ;
TextBox_Answer << imposta testo ( "La selezione è:" || B_Choice ) ;
NO << rimostra
);
);
);
Espr_Panel_Box_B = Espr (
Panel_Box_B = Panel Box ( "Seconda scelta" ,
Lista_Box_B ,
Casella di testo ( " " ) ,
TextBox_Answer = Casella di testo ( "" )
)
);
List_Box_B = Casella di riepilogo ( List_B , Print ( "" ) ) ;
TextBox_Answer = Casella di testo ( "" ) ;
Risposta = "" ;
A_Scelta = 0 ;
Valutazione ( Expr_Redraw_NW ) ;
Caselle di riepilogo - la proprietà "imposta selezionati"Geniale! Sì, risolve il problema in modo eccellente, e non solo, suggerisce anche un modo per estendere il processo e gestire una serie di query simili. Grazie mille!
Davide