如何防止在窗体未激活时快捷键被触发

4

我在页面控件的选项卡内打开表单。这些表单可能包含带有快捷键的操作。我希望只有包含此表单的选项卡处于活动状态时才触发这些快捷键。

我尝试重写表单的IsShortCut方法,但它并未被调用。表单的OnShortCut也没有被调用。

我希望避免在每个操作上放置代码来检查这一点。

我正在使用Delphi 2010。


当您提到页面控件内有“表单”时,我猜您是指TPageControl控件中包含TTabSheets? - Andreas Rejbrand
也许我们说的并不是同一件事情,因为如果按照我认为你所做的那样,TForm的OnShortCut确实会被调用... - Andreas Rejbrand
每个选项卡都是一个窗体的父级。 - Erick Sasse
3个回答

3

将隐藏选项卡上的操作列表的 State 设置为 asSuspended。只有可见选项卡上的操作列表应该具有 asNormal 状态,这将防止快捷键起作用。它还会防止这些操作更新,这可能是您的应用程序需要或不需要的。


0

尝试在你切换到其他选项卡时将表单的 Enabled 属性设置为 false,而在切换到它所在的选项卡时将其设置为 True。这应该会禁用表单上的所有内容,包括快捷方式。


我不确定这是否有效,因为如果TTabSheet上的TButton由TAction控制,则禁用TTabSheet(因此禁用TButton)将不会自动禁用TAction。 - Andreas Rejbrand
1
从描述来看,我假设他是将实际的TForm子类放置在选项卡上。如果不是,那么我的答案可能无效。 - Mason Wheeler

0
将所有的快捷方式放入操作中,然后将这些操作放入每个表单的一个操作列表中。然后,您可以禁用当前未激活的表单的操作列表。(我不记得要设置哪个TActionList属性或调用哪个方法来激活/停用它,但是它肯定存在。)

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