Чому саме Microsoft Word не може закритися, якщо діалогове вікно відкрите?


28

Іноді я отримую помилку, яку дає Word, намагаючись закрити документ із відкритим іншим діалоговим вікном, але я ніколи не зміг зрозуміти, чому це відбувається.


6
Загальна проблема полягає в тому, що матеріали в діалоговому вікні можуть стати дійсними, недійсними або навіть неприйнятними залежно від того, що ви робите в головному вікні, і часто немає чіткого способу вирішити це за допомогою змін, які користувач міг би внести у діалоговому вікні у вікні проміжний. (Я думаю, це лише черговий прояв більш загального принципу "петлі зворотного зв'язку можуть спричинити проблеми в системі".)
Мехрдад

Вони можуть, якщо запустити диспетчер завдань і сказати йому, щоб вбити процес. =) Але це може мати несподівані побічні ефекти. ( Можливо, трапляються поодинокі випадки, коли файл може бути пошкодженим, але я впевнений, що вони були б надзвичайно рідкісними. Він повинен бути розроблений для непередбачених збоїв та відключення електроенергії.)
jpmc26

Відповіді:


61

Оскільки більшість діалогових вікон вважаються " модальними ", це означає, що управління не переходить до основної програми або викликає контейнер, поки діалогове вікно не закриється. Це за дизайном, і програміст має можливість зробити вікно модальним або немодальним. Зазвичай вікно визначається як модальне, якщо основна програма не може або не повинна продовжуватись доти, доки відкрите діалогове вікно не буде вирішено - або шляхом вибору (Добре), або переривання (Скасувати).


4
Але якщо діалог був модальним, як ОП дав вказівку програмі закритись? Може ще щось тут відбувається?
Гонки легкості з Монікою

7
@LightnessRacesinOrbit Існує багато способів закриття програми, не всі з яких вимагають клацання на головному вікні. Наприклад, ви можете клацнути правою кнопкою миші на вкладці панелі завдань і вибрати "Закрити", або витягнути диспетчер завдань за допомогою Ctrl-Shift-Esc і спробувати закрити звідти. Вимкнення Windows також спробує спочатку закрити додатки, хоча потім може "вбити" їх після закінчення тайм-ауту. Вони надсилають програмі сигнал, щоб закрити, без того, щоб вона фактично була зосереджена, отже, на екрані Боба написано "Натисніть ОК, переключиться на Word" у такому порядку.
IMSoP

@IMSoP: Я усвідомлюю, що існує більше "інженерних" способів подати заявку на закриття програми, але я подумки намалював лінію, де я думаю, що "загальне використання" закінчується, тому що я очікував, що ОП точно визначить, що саме вони робили, якщо це виходило за рамки "загального користування".
Гонки легкості з Монікою

11
@LightnessRacesinOrbit Я надаю вам диспетчер завдань - більш "експертний" спосіб, але я би не здивувався, якби люди думали, що закрити щось із панелі завдань було абсолютно нормально. Насправді я тепер розумію, що вам навіть не потрібно клацати правою кнопкою миші, там є червона кнопка [x], якщо ви наведіть курсор на групу або перегляньте мініатюру. Різні речі здаються очевидними для різних людей.
IMSoP


20

Діалогове вікно може сказати щось на зразок:

Ви внесли зміни до свого документа, чи хочете їх зберегти? (Так ні)

Тут немає очевидної правильної відповіді. Можливо, ви випадково пошкодили ваш документ (наприклад, кішка перейшла через клавіатуру). У цьому випадку відповідь - «Ні», або ви могли витратити години на введення змін, і в цьому випадку відповідь - «Так».

Найбезпечніше для Word - це відмовитись від закриття, поки ви не відповісте на питання.


8
Я майже впевнений, що питання стосується саме цієї помилки.
Боб

12
Гаразд, але в цьому питанні не було вказано жодного конкретного діалогового вікна. Я програміст, я розумію, що таке модальне діалогове вікно, проте я намагався відповісти на питання, чому це відбувається.
Нік Гаммон

IMHO повинен мати на увазі, що люди, які не є програмістами, використовують програми.
LawrenceC

1

Оскільки програма створена таким чином, щоб уникнути дії, користувач може не захотіти.

Зазвичай діалогове вікно відображається тоді, коли програмі потрібен користувач, щоб провести певні дії. Закриття збереженого документа є прекрасним прикладом: діалогове вікно пропонує зберегти зміни, відмінити зміни або перервати закриття та повернутися до редагування. Програма навмисно відмовляється закривати, не відповідаючи на це запитання, оскільки закриття змусить НЕЧЕГО вжити заходів. Програма не може самостійно визначитися, наприклад. відмовтеся від нещодавнього редагування або, навпаки, замініть правильну версію за допомогою введення кота на клавіатурі

Навіть якщо ми розглядаємо діалогове вікно, яке не пов'язане із закриттям, воно зазвичай означає, що якийсь процес триває, він ще не завершений, і користувач повинен вирішити, яким шляхом піти. Це не може бути "просто перервано", тому що переривання - це також дія, яку може не мати на увазі користувач.

Це також спрощує дизайн програми, оскільки її творцям не потрібно створювати "безпечний вихід" для кожної функції.

Сьогодні більшість діалогів не є модальними в технічному розумінні (програма залишається відповідальною), але все ж простіше зробити їх модальними в більш широкому розумінні логічного потоку програми.


0

Я можу помилитися, але я підозрюю, що це відноситься до старої загальної поведінки діалогового контролю.

Деякі з тих, хто їх вбивав раптово, не повертаючись, мали неприємні побічні ефекти, іноді навіть поза програмою, яка вже помер, і не було способу ввічливо вирватися з них у всіх випадках, якщо вони робили щось на системному рівні, який вимагав від користувачів.

Щодо того, як це все ще так, люди звикли до цього, розробники програмували це припущення десятиліттями і, що ще важливіше, непрограмісти використовували ці діалоги у своїх сценаріях автоматизації офісу, і Microsoft - це нічого, якщо не суворе дотримання цілей зворотної сумісності .


0

За завісами програма (в нашому випадку це MS Word) створює вікно "обробник подій натискання кнопки X" під час створення вікна. Коли є діалогове вікно, Word це записує. Потім у обробнику кнопки X після натискання кнопки X перевіряється наявність записаних відкритих діалогових вікон. Якщо такі є, обробник припиняє роботу. Якщо таких немає, він припиняє програму, і ОС очищає пам'ять, яку займає програма. Ось як це працює.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.