Problème
De nombreuses applications nécessitent d'inviter l'utilisateur à saisir des entrées ou à faire des choix, puis d'agir sur cette entrée. Cette recette crée un sans mode (c'est-à-dire non modale) boîte de dialogue avec des choix. Lorsque l'utilisateur clique sur le D'accord bouton pour fermer la fenêtre, il stocke les entrées de l'utilisateur dans des variables et effectue ensuite tout le travail nécessaire.
Solution
Le Nouvelle fenetre() La fonction créera une fenêtre que vous pouvez utiliser pour inviter l'utilisateur à entrer. Dans la nouvelle fenêtre, vous pouvez utiliser boîtes d'affichage du sélecteur d'entrée pour recueillir les choix de l'utilisateur.
Vous utiliserez ensuite le Définir la fonction ou définir le script option sur un Boîte à boutons pour stocker les valeurs des zones d'affichage dans des variables JSL.
La dernière partie du script dans la boîte à boutons effectue le travail requis après que l'utilisateur a fermé la fenêtre.
win = New Window( "Set the Value",
H List Box( Text Box( "Set this value" ), num_edit_box1 = Number Edit Box( 42 ) ),
check_box_1 = Check Box( "On" ),
combo_box1 = Combo Box( {"Choice 1", "Choice 2", "Choice 3"} ),
list_box1 = List Box( {"Choice 3", "Choice 4", "Choice 5"} ),
H List Box(
Button Box( "OK",
//store results in jsl variables
num_input = num_edit_box1 << get;
check_box_input = check_box_1 << get;
combo_box_input = combo_box1 << get selected;
list_box_input = list_box1 << get selected;
//close the window
//wait until you've unloaded the input boxes before you closing
//or else they'll be gone
win << close window;
//now do whatever work you want with the inputs
Show( num_input, check_box_input, combo_box_input, list_box_input );
),
//a cancel button that closes the window and doesn't store store the results
Button Box( "Cancel", win << close window )
)
);
Discussion
Les dialogues non modaux sont un peu plus délicats que les dialogues modaux puisque tout code après le Nouvelle fenetre() sera exécuté avant la fermeture de la boîte de dialogue. C'est pourquoi vous devez mettre le "travail" à faire dans le script de la boîte à boutons.
Voir également
Récupérer les valeurs d'une boîte de dialogue non modale