【发布时间】:2010-10-20 16:34:24
【问题描述】:
在我几年前开发的代码中,我经常使用这个来关闭当前表单,随时按下 Escape 键:
procedure TSomeForm.FormKeyPress(Sender: TObject; var Key: Char);
begin
if key = #27 then close;
end;
此行为是为 TForm 定义的。表单的KeyPreview 属性设置为True 以让表单在任何其他组件之前对按键做出反应。对于程序的最佳部分来说,这一切都运行良好,但是,当在 TEdit 组件聚焦时按下 Escape 键时会发出声音(Windows 使用 ding 声音表示无效操作) .它仍然可以正常工作,但我从来没有完全摆脱声音。
这有什么问题?
重建步骤:
- 新的 VCL Forms 应用程序,将表单的 KeyPreview 设置为 true
-
在“事件”选项卡上双击 onKeyPress 事件并输入虚拟代码:
如果键=#27 那么;
在窗体中添加 TListBox、TCheckBox、TEdit 并运行应用程序
- 在应用程序中尝试按 Esc 并没有发生任何事情,正如虚拟代码所指定的那样
- 聚焦 TEdit 并按 Esc。什么都没有发生,只是播放了声音。
【问题讨论】:
标签: delphi user-interface event-handling escaping onkeypress