禁用键盘快捷键(delphi)

禁用键盘快捷键(delphi),delphi,shortcut,keyboard-shortcuts,Delphi,Shortcut,Keyboard Shortcuts,我用Delphi创建了一个表单。 假设我有一个表单,带有速度按钮,标签为“&Add”(下划线a,作为键盘快捷键),还有一个dbgrid(只读状态)(或其他控件,如TButton) 然后我将焦点更改为Dbgrid(Dbgrid获得了焦点)(或更改为TButton) 每次我按下dbgrid上的a键时,speedbutton上的onClick方法就会触发 有时我需要出于某种原因禁用它一段时间,然后再次启用它。 如何禁用速度按钮快捷方式? 那么如何再次启用它呢?当您按下A时,表单会按下该按钮,因为该按钮

我用Delphi创建了一个表单。 假设我有一个
表单
,带有
速度按钮
,标签为
“&Add”
(下划线a,作为键盘快捷键),还有一个
dbgrid
(只读状态)(或其他控件,如
TButton

然后我将焦点更改为
Dbgrid
Dbgrid
获得了焦点)(或更改为
TButton

每次我按下
dbgrid
上的a键时,
speedbutton
上的
onClick
方法就会触发

有时我需要出于某种原因禁用它一段时间,然后再次启用它。 如何禁用
速度按钮
快捷方式?
那么如何再次启用它呢?

当您按下A时,表单会按下该按钮,因为该按钮表示对该键感兴趣,而表单上没有任何其他内容会接受击键。如果表单上有一个编辑框,并且它有输入焦点,则不会触发该按钮

您可以使控件指示它希望在具有焦点时接收击键,但这通常发生在编写自定义控件时,您对新控件类在接收键盘输入时应执行的操作有些了解


如果不想触发该按钮,可以禁用它。另一个选项是在执行通常的单击处理代码之前,更改OnClick事件处理程序以检查其他条件(例如网格是否有焦点)。

您可以通过将速度按钮的标签从
&Add
更改为
Add
来禁用快捷方式。当需要再次启用快捷方式时,请将其更改回


请注意,指定这样的加速器字符可启用两个快捷键,一个是以
&
开头的键,另一个是以Alt开头的相同键。因此,在您的情况下,它们将是A和Alt+A。同样,取消加速器将禁用两个快捷键。因此,请记住,使用此禁用快捷方式的方法,您将无法使用A或Alt+A触发按钮。

使用formShortcut事件如何?我们可以从这里禁用它吗?我不明白,为什么这个事件会触发两次?是的,看起来OnShortcut事件也会起作用。但我不知道为什么会发射两次。你可以做一些调查,或者你可以发布另一个问题,询问它为什么会这样工作。