<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Diese Anfrage hängt mit einer früheren Anfrage von mir zusammen, bei der es um die Aktualisierung einiger Skripts ging, um die Funktionen von JMP 9 besser nutzen zu können ( http://communities.sas.com/message/109908#109908 ), aber es ist nicht ganz das gleiche Problem, denke ich.Im Wesentlichen handelt es sich dabei um das Neuzeichnen eines Fensters, das ein Listenfeld enthält, aus dem bereits eine Auswahl getroffen wurde.Im folgenden vereinfachten Beispiel treffe ich eine Auswahl aus Liste A und erstelle dann das Fenster, in dem Liste A angezeigt wird, mit einem zweiten Listenfeld (Listenfeld
, dessen Inhalt von der Auswahl aus A abhängt.Wenn der Benutzer aus dem Listenfeld B auswählt, erscheint die endgültige Auswahl im Textfeld darunter.Wenn eine Auswahl aus Listbox A getroffen wird, wird in Listbox B eine neue Auswahlliste bereitgestellt, aus der der Benutzer noch eine endgültige Auswahl treffen muss.Die Ausführung in JMP 8 funktioniert wie gewünscht, während die Ausführung in JMP 9 eine Endlosschleife erzeugt.Ich denke, ich kann verstehen, warum: Die Zeile, die ich mit einem Kommentar markiert habe (der die Auswahl aus Listbox A mit der Eigenschaft „<< set selected“ hervorhebt, wenn beide Listboxen A und B im Fenster angezeigt werden), behandelt die Zuweisung als ob ich diese Auswahl getroffen hätte, indem ich darauf geklickt hätte, und verhalte mich entsprechend.Natürlich könnte ich diese Zeile einfach entfernen, aber wenn ich das mache, kann der Benutzer den Pfad, der zur endgültigen Auswahl in den Listenfeldern geführt hat, nicht sehen – und das ist notwendig.Alternativ könnte ich einfach alle Listenfelder von Anfang an in das Fenster einbeziehen und das Fenster überhaupt nicht neu zeichnen, aber in der realen Version weiß der Benutzer von Anfang an nicht, wie viele Listenfelder er verwenden muss - und ich möchte eigentlich nicht mehr gleichzeitig auf dem Bildschirm anzeigen, als tatsächlich benötigt wird.
Liste_A = { "Andy" , „Bessie“ , „Carrie“ , „Davina“ , „Eddie“ } ;
Liste_B = {} ;
Expr_Redraw_NW = Ausdruck (
List_Box_A = Listenfeld ( Liste_A , evalu ( Expr_Create_List_B )) ;
NW = neues Fenster ( "Neues Fenster" ,
HListBox (
Panel-Box ( "Erste Wahl" , List_Box_A ) ,
Wenn ( Eine Wahl > 0 ,
Panel-Box ( "Zweite Wahl" ,
List_Box_B ,
Textfeld ( " " ) ,
TextBox_Answer = Textfeld ( „“ )
)
)
)
) ;
Wenn ( Eine Wahl > 0 , List_Box_A << Satz ausgewählt ( Eine Wahl )) ; // Diese Zeile verursacht das Problem;
NW << Fenster verschieben ( 200 , 200 ) ;
) ;
Expr_Create_List_B = Ausdruck (
Präfix = ( List_Box_A << ausgewählt werden )[ 1 ] ;
zeigen ( Präfix ) ;
Eine Wahl = ( List_Box_A << Holen Sie sich ausgewählte Indizes )[ 1 ] ;
zeigen ( Eine Wahl ) ;
Liste_B = {} ;
für ( ich = 1 , ich <= 5 , ich ++,
einfügen in ( Liste_B , Präfix || " " || verkohlen ( ich ))
) ;
List_Box_B = Listenfeld ( Liste_B ,
B_Wahl = ( List_Box_B << ausgewählt werden )[ 1 ] ;
TextBox_Answer << Text setzen ( „Auswahl ist:“ || B_Wahl ) ;
NW << wieder aufführen
) ;
NW << Fenster schließen ;
evalu ( Expr_Redraw_NW ) ;
) ;
List_Box_B = Listenfeld ( Liste_B , drucken ( „“ )) ;
TextBox_Answer = Textfeld ( „“ ) ;
Antwort = „“ ;
Eine Wahl = 0 ;
evalu ( Expr_Redraw_NW ) ;
Kann jemand einen einfachen Ausweg aus dieser Situation sehen, der nicht mit einer grundlegenden Umstrukturierung der Funktionsweise verbunden ist?Ich habe in drei oder vier Skripten ein ähnliches Problem, daher möchte ich die Abhilfemaßnahmen möglichst auf ein Minimum beschränken.
Vielen Dank für jede erhaltene Hilfe.