如何让组合框和单选按钮“失焦”?

问题描述 投票:0回答:1

我正在尝试制作一个从键盘读取按键的应用程序。当我按下一个键时,程序会将其添加到一个数组中,然后我就可以执行我想要的操作。我不是在编辑中写作。我直接按下键盘上的按钮,因为我希望能够使用其他输入(例如阅读器)来模拟键盘等输入。现在我添加了一个组合框和单选按钮,将来我将用它们添加新的东西。添加组件后,我再次尝试了该应用程序,并且该程序不再读取按键,因为它尝试在组合框中写入。如果我按组合框外部或选择一个选项,则什么也不会发生,并且它会继续尝试在其中写入。如果我按下单选按钮,程序不再尝试在组合框中写入,但它仍然不会从键盘读取按键,可能是因为现在焦点位于单选按钮上。如果我将组合框属性设置为

enabled := false
并且不按单选按钮,那么它会再次起作用。我认为问题在于该程序将“焦点”放在组件上。我研究了组件的属性,但没有看到任何可以提供帮助的属性。有没有办法通过组件上的代码或属性使组件不再是程序的焦点。我使用 TRadioButton、TComboBox 或 TADVComboBox。

我使用FormKeyDown事件来获取关键信息。过程

TfrmConfigCheck.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
     
end;
delphi vcl delphi-2007
1个回答
0
投票

您需要将表单上的

KeyPreview
属性设置为
True

如果

KeyPreview
设置为
False
,则当某些组件(例如
onKeyDown
)获得焦点时,不会调用表单的
TComboBox
事件。

但是,如果将

KeyPreview
属性设置为
True
,则每次按下按键时都会调用表单的
onKeyDown
事件,无论表单上聚焦于哪个组件。


关于评论中的其他问题,您不能将

TComboBox
设置为
readonly
,但您可以将
style
属性设置为
csDropDownList
,这是一种
readonly
模式,因为用户无法输入任何详细信息

© www.soinside.com 2019 - 2024. All rights reserved.