Иногда я получаю сообщение об ошибке, которое выдает Word, когда пытается закрыть документ с другим открытым диалоговым окном, но я так и не смог понять, почему это происходит.
Иногда я получаю сообщение об ошибке, которое выдает Word, когда пытается закрыть документ с другим открытым диалоговым окном, но я так и не смог понять, почему это происходит.
Ответы:
Поскольку большинство диалоговых окон считаются « модальными », это означает, что управление не передается обратно основной программе или вызывающему контейнеру, пока само диалоговое окно не будет закрыто. Это сделано специально, и у программиста есть возможность сделать окно модальным или немодальным. Обычно окно определяется как модальное, если основная программа не может или не должна продолжать работу, пока открытое диалоговое окно не будет обработано либо с помощью выделения (Ok), либо с помощью прерывания (Cancel).
Диалоговое окно может говорить что-то вроде:
Вы внесли изменения в свой документ, хотите ли вы сохранить их? (Да нет)
Здесь нет очевидного правильного ответа. Возможно, вы случайно испортили ваш документ (например, кошка прошла по клавиатуре), и в этом случае ответ «Нет», или вы могли часами вводить изменения, и в этом случае ответ был «Да».
Самое безопасное для Word - это отказаться от закрытия, пока вы не ответите на вопрос.
Поскольку программа разработана таким образом, чтобы избежать действий, которые пользователь может не захотеть.
Обычно диалоговое окно отображается, когда программе необходимо, чтобы пользователь провел какое-то действие. Отличным примером является закрытие несохраненного документа: диалоговое окно предлагает сохранить изменения, отменить изменения или отменить закрытие и вернуться к редактированию. Программа намеренно отказывается закрываться, не отвечая на этот вопрос, потому что закрытие заставит НЕКОТОРЫЕ действия предпринять. Программа не может решить самостоятельно, например. отменить недавнее редактирование или, наоборот, перезаписать правильную версию с помощью ввода с клавиатуры.
Даже если мы рассматриваем диалог, который не связан с закрытием, это обычно означает, что какой-то процесс находится в процессе, он еще не завершен, и пользователь должен решить, каким путем идти. Его нельзя «просто прервать», потому что прерывание - это также действие, которое пользователь не может иметь в виду.
Это также упрощает дизайн программы, поскольку ее создатели не должны создавать «безопасный выход» из каждой функции.
Сегодня большинство диалогов не являются модальными в техническом смысле (программа остается ответственной), но все же проще сделать их модальными в более широком смысле логического потока программы.
Я могу ошибаться, но я подозреваю, что это восходит к старому общему поведению управления диалогом.
Некоторые из тех, кто был внезапно убит без возврата, имели неприятные побочные эффекты, иногда даже за пределами уже мертвой программы, и во всех случаях не было способа вежливо убежать от них, если они делали что-то на системном уровне, что требовало ввода данных пользователем.
Относительно того, почему это все еще так, люди привыкли к этому, разработчики запрограммировали это предположение на десятилетия, и, что более важно, непрограммисты использовали эти диалоги в своих сценариях автоматизации делопроизводства, и Microsoft - ничто иное, как строгая приверженность целям обратной совместимости. ,
За кулисами программа (в нашем случае это MS Word) создает «обработчик события нажатия кнопки X» при создании окна. Когда есть диалоговое окно, Word записывает это. Затем, в обработчике кнопки X, когда кнопка X нажимается, она проверяет записанные открытые диалоговые окна. Если они есть, обработчик прерывает операцию закрытия. Если нет, это завершает программу, и ОС очищает память, занятую программой. Вот как это работает.