我偶尔会遇到 Word 在尝试关闭打开另一个对话框的文档时给出的错误,但我从未弄清楚为什么它发生了。
答案1
由于大多数对话框被认为是“情态动词“这意味着在对话框本身关闭之前,控制权不会交还给主程序或调用容器。这是设计使然,程序员可以选择将窗口设为模态或非模态。通常,如果主程序不能或不应该继续运行,直到通过选择(确定)或中止(取消)处理打开的对话框,则将窗口定义为模态的。
答案2
对话框可能会显示如下内容:
您对文档做了更改,是否要保存?(是)(否)
这里没有明显的正确答案。您可能不小心损坏了文档(例如,猫踩坏了键盘),在这种情况下答案是“否”,或者您可能花了几个小时输入更改,在这种情况下答案是“是”。
Word 最安全的做法是,直到您回答完问题才拒绝关闭。
答案3
因为程序是这样设计的,以避免采取用户可能不想要的操作。
通常,当程序需要用户指导某些操作时,会显示一个对话框。关闭未保存的文档就是很好的例子:对话框提供保存更改、放弃更改或中止关闭并返回编辑。程序故意拒绝关闭而不回答这个问题,因为关闭将强制采取某些操作。程序无法自行决定,例如放弃最近的编辑,或者相反,用猫在键盘上打字覆盖正确的版本。
即使我们考虑与关闭无关的对话框,它通常也意味着某个过程正在进行,尚未完成,用户必须决定要走哪条路。它不能“简单地中止”,因为中止也可能是用户不想执行的操作。
它还简化了程序的设计,因为它的创建者不必为每个功能创建“安全的出路”。
今天,大多数对话框在技术意义上都不是模态的(程序仍然负责),但从程序的逻辑流的更广泛意义上使它们成为模态的仍然更容易。
答案4
在幕后,程序(在我们的例子中是 MS Word)在创建窗口时创建一个“X 按钮单击事件处理程序”。当有对话窗口时,Word 会记录下来。然后,在 X 按钮处理程序中,当单击 X 按钮时,它会检查记录的打开的对话窗口。如果有,处理程序会中止关闭操作。如果没有,它会终止程序,操作系统会清理程序占用的内存。这就是它的工作原理。