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