3

在我的 Delphi 应用程序中,我有一个自定义 Yes, No, Cancel 对话框,将从主窗体调用该对话框以确认保存对当前编辑的文件所做的更改。这通常可以通过 messageDlg() 实现,但我希望这个对话具有自定义外观,所以我试图通过以下方式实现此功能

case myDialogue.showModal of
  mrYes: <<save changes>>;
  mrNo: <<quit application without saving changes>>
  mrCancel: <<set the closeAction to caNone and do nothing>>
end;

问题是,默认情况下,表单通过返回mrNo TModalResult来响应按 Escape 键。而且您可以看到这是多么糟糕,因为您的直觉告诉您,退出模态对话将取消预期的退出应用程序过程,但实际上发生的是您发出不保存任何更改命令并且应用程序退出。

直到我以这种方式失去了一个小时的工作,我才注意到这种行为。没有 FormKeyPressed 事件处理程序或任何响应按键的内容被放入 myModalDialogue 代码中。它是如此有效,以至于在使用显示的表单中按 EscshowModal将返回mrNo。如何覆盖此默认行为?

4

2 回答 2

15

您需要确保“否”按钮的 Cancel 属性为 False,并且“取消”按钮的 Cancel 属性为 True。

于 2009-04-18T09:37:51.187 回答
4

设置对话框中按钮的取消和默认属性。

于 2009-04-18T09:38:31.793 回答