禁用键盘快捷键(Delphi)

3
我在Delphi中创建了一个表单。 假设我有一个带有标签为“&Add”(下划线A,作为键盘快捷方式)的speedbutton和一个dbgrid(只读状态)(或其他控件,如TButton)。
然后我将焦点更改为Dbgriddbgrid获得焦点)(或TButton)。
每次我在dbgrid上按a键时,speedbuttononClick方法会触发。
有时我需要出于某种原因暂时禁用它,然后再次启用它。 如何禁用speedbutton的快捷方式? 然后如何再次启用它?
2个回答

4
当你按下A键时,该表单按下按钮,因为该按钮对该键表示出兴趣,并且您的表单中没有任何其他接受按键输入的内容。如果您在表单上有一个编辑框,并且它具有输入焦点,则不会触发该按钮。
您可以使控件指示它希望在拥有焦点时接收按键输入,但这通常发生在编写自定义控件时,您对新控件类应在接收键盘输入时执行什么操作有一些想法。
如果您不希望触发按钮,则可以将其禁用。另一个选择是修改OnClick事件处理程序,在执行通常的点击处理代码之前检查其他条件(例如,网格是否具有焦点)。

使用 formShortcut 事件怎么样?我们能从这里禁用它吗?我不明白,为什么这个事件会触发两次? - goggle pink
是的,看起来OnShortcut事件也可以工作。不过我不知道为什么它会触发两次。你可以进行一些调查,或者你可以发布另一个问题,询问为什么它的工作方式如此。 - Rob Kennedy

0

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

请注意,像这样指定加速键字符会启用两个快捷键,一个是仅带有&前缀的按键,另一个是相同的按键与Alt。因此,在您的情况下,它们将是AAlt+A。同样,消除加速器会禁用两个快捷键。因此,请记住,使用此禁用快捷方式的方法,您将无法使用AAlt+A触发按钮。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接