如果打开对话框,为什么Microsoft Word不能完全关闭?


28

在尝试打开另一个对话框关闭文档时,偶尔会出现Word给出的错误,但我一直无法弄清它为什么会发生。


6
普遍的问题是,对话框中的内容可能会变成有效,无效甚至不适用,这取决于您在主窗口中执行的操作,并且通常没有明确的方法来解决用户可能在对话框中对对话框所做的更改临时。(我想这只是“反馈循环会导致系统出现问题”这一更普遍原则的另一种体现。)
Mehrdad

如果您启动任务管理器并告诉它终止该过程,他们可以这样做。=)但这可能会有意想不到的副作用。(有可能是一些极少情况下,一个文件可能最终会损坏,但我敢肯定他们会非常罕见的它必须被设计为无法预料的崩溃和停电反正。)
jpmc26

Answers:


61

因为大多数对话框被认为是“ 模态 ”的,这意味着在对话框本身关闭之前,控件不会传递回主程序或调用容器。这是设计使然,程序员可以选择将窗口设为模态窗口或非模态窗口。通常,如果主程序在通过选择(Ok)或中止(Cancel)处理打开的对话框之前无法或不应该继续运行,则将窗口定义为模态窗口。


4
但是,如果对话框是模式对话框,OP如何指示程序关闭?可能这里还有其他事情吗?
与莫妮卡(Monica)进行的轻度比赛

7
@LightnessRacesinOrbit有多种关闭程序的方法,并非所有方法都需要在主窗口上单击。例如,您可以右键单击任务栏条目并选择“关闭”,或者使用Ctrl-Shift-Esc向上拉任务管理器并尝试从那里关闭。关闭Windows还将首先尝试正常关闭应用程序,尽管超时后可能会“杀死”它们。它们向程序发送一个信号以使其关闭,而实际上没有使其聚焦,因此Bob的屏幕截图按该顺序显示“单击OK,切换到Word”。
IMSoP

@IMSoP:我知道有更多的“工程”方式要求关闭应用程序,但我会在脑海中划定一条线,认为“常用”结束,因为我希望OP能够准确指定什么如果超出“常用范围”,他们就会这样做。
与莫妮卡(Monica)进行的轻度比赛

11
@LightnessRacesinOrbit我为您授予“任务管理器”是一种“专家”方式,但是如果人们认为关闭任务栏上的某些东西是完全正常的,我不会感到惊讶。实际上,我现在意识到,您甚至不需要右键单击,如果将鼠标悬停在某个组上或查看小缩略图,则旁边有一个红色的[x]按钮。对不同的人来说,不同的事情似乎很明显。
IMSoP


20

该对话框可能会说:

您已经对文档进行了更改,是否要保存它们?(是)(否)

这里没有明显的正确答案。在这种情况下,答案可能是“否”,或者您不小心损坏了文档(例如,猫从键盘上走过),或者在答案是“是”时,您可能花费了数小时来键入更改。

Word要做的最安全的事情是拒绝关闭,直到您回答问题。


8
我很确定问题专门针对错误。
鲍勃

12
好的,但是问题没有提到任何特定的对话框。我是一名程序员,我了解模态对话框是什么,但是我试图回答它为什么发生的问题。
尼克·加蒙

恕我直言,请记住,不是程序员的人会使用程序。
LawrenceC '18

1

因为程序是按这种方式设计的,所以避免采取用户可能不希望采取的措施。

通常,当程序需要用户指导某些操作时,会显示一个对话框。关闭未保存的文档就是一个很好的例子:对话框提供了保存更改,放弃更改或中止关闭并返回编辑的功能。该程序有意拒绝关闭而不回答这个问题,因为关闭将迫使采取某些措施。该程序无法自行决定,例如。放弃最近的编辑,或者相反,使用键盘上的猫打字覆盖正确的版本。

即使我们认为与关闭无关的对话框,通常也意味着某些过程正在进行中,尚未完成,用户必须决定采用哪种方法。它不能被“简单地中止”,因为中止也是用户可能不想要的动作。

它也简化了程序的设计,因为它的创建者不必为每个功能创建“安全的出路”。

如今,大多数对话框在技术上都不是模态的(程序仍然是负责任的),但是从更广泛的程序逻辑流程的角度来看,使它们成为模态仍然更加容易。


0

我可能会误会,但是我怀疑这可以追溯到旧的常见对话框控件行为。

如果其中一些突然被杀死而没有返回,则会带来令人不快的副作用,有时甚至是在现已死机的程序之外,并且如果他们在需要用户输入的系统级别上执行某些操作,那么在任何情况下都无法从他们那里逃脱。

至于为什么仍然如此,人们已经习惯了,几十年来使用该假设进行编程的开发人员,更重要的是非程序员在其办公自动化脚本中使用了这些对话框,而Microsoft并不是严格遵守目标的向后兼容性。 。


0

在窗帘的后面,程序(在我们的示例中为MS Word)在创建窗口时创建了“ X按钮单击事件处理程序”。当有一个对话框窗口时,Word会记录下来。然后,在X按钮处理程序中,单击X按钮时,它将检查记录的打开的对话窗口。如果存在,则处理程序中止关闭操作。如果没有,它将终止程序,操作系统将清理程序占用的内存。这就是它的工作方式。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.