web-dev-qa-db-fra.com

Pourquoi exactement Microsoft Word ne peut-il pas fermer si une boîte de dialogue est ouverte?

Il arrive parfois que l'erreur que donne Word lorsque je tente de fermer un document avec une autre boîte de dialogue ouverte, mais je n'ai jamais réussi à comprendre pourquoi cela se produit.

27
John

Parce que la plupart des boîtes de dialogue sont considérées comme " modal ", ce qui signifie que le contrôle ne sera pas retransmis au programme principal, ni au conteneur appelant, jusqu'à ce que la boîte de dialogue soit fermée. Ceci est voulu par la conception et le programmeur a la possibilité de créer une fenêtre modale ou non modale. Habituellement, une fenêtre est définie comme modale si le programme principal ne peut ou ne doit pas continuer tant que la boîte de dialogue ouverte n'est pas traitée, que ce soit par sélection (Ok) ou par abandon (Annuler).

60
Bill Hileman

La boîte de dialogue pourrait dire quelque chose comme:

Vous avez apporté des modifications à votre document, souhaitez-vous les enregistrer? (Oui Non)

Il n'y a pas de bonne réponse évidente ici. Vous avez peut-être accidentellement corrompu votre document (par exemple, le chat a marché sur le clavier), auquel cas la réponse est "Non", ou vous avez passé des heures à saisir des modifications, auquel cas la réponse est "Oui".

La chose la plus sûre à faire pour Word est de refuser de fermer avant de répondre à la question.

20
Nick Gammon

Étant donné que le programme est conçu de cette manière, l'utilisateur peut ne pas vouloir éviter toute action.

Habituellement, une boîte de dialogue est affichée lorsque le programme demande à l'utilisateur de guider une action. La fermeture d'un document non sauvegardé est un excellent exemple: une boîte de dialogue vous permet d'enregistrer les modifications, de les ignorer ou d'annuler la fermeture et de revenir à l'édition. Le programme refuse délibérément de fermer sans répondre à cette question car la fermeture obligera certaines actions à être entreprise. Le programme ne peut pas décider seul, par exemple. annulez l'édition récente ou, au contraire, écrasez la version correcte en tapant au clavier.

Même si nous considérons un dialogue qui n'est pas lié à la clôture, cela signifie généralement qu'un processus est en cours, qu'il n'est pas encore terminé et que l'utilisateur doit choisir la voie à suivre. Il ne peut pas être "simplement abandonné", car abandonner est également une action que l'utilisateur n'a peut-être pas voulue dire.

Cela simplifie également la conception du programme, car ses créateurs n'ont pas à créer "un moyen sûr de sortir" de chaque fonction.

Aujourd'hui, la plupart des dialogues ne sont pas modaux au sens technique (le programme reste responsable), mais il est toujours plus facile de les rendre modaux dans un sens plus large de la logique du programme.

1
Agent_L

Je peux me tromper, mais je soupçonne que cela remonte au vieux comportement commun du contrôle de dialogue.

Tuer brusquement sans revenir avait des effets secondaires désagréables, parfois même en dehors du programme maintenant mort et il n'y avait pas moyen de leur échapper poliment dans tous les cas s'ils agissaient au niveau du système nécessitant l'intervention de l'utilisateur.

Quant aux raisons pour lesquelles il en est toujours ainsi, les gens s'y sont habitués, les développeurs ont programmé avec cette hypothèse pendant des décennies et surtout les non-programmeurs ont utilisé ces dialogues dans leurs scripts de bureautique et Microsoft n’adhère pas rigoureusement aux objectifs de compatibilité ascendante .

0
Bill

Derrière les rideaux, le programme (dans notre cas, c'est MS Word) crée un "gestionnaire d'événements de clic sur le bouton X" lors de la création de la fenêtre. Quand il y a une fenêtre de dialogue, Word l'enregistre. Ensuite, dans le gestionnaire de bouton X, lorsque le bouton X est cliqué, il vérifie les fenêtres de dialogue ouvertes enregistrées. S'il y en a, le gestionnaire annule l'opération de fermeture. S'il n'y en a pas, le programme se termine et le système d'exploitation nettoie la mémoire occupée par le programme. Voilà comment cela fonctionne.

0