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

jtoj6r0c  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(132)

我正在尝试做一个应用程序,可以从键盘上读取按键。当我按下一个键时,程序会将其添加到一个数组中,然后我做我想做的事情。我不是在编辑控件中编写。我直接按键盘上的按钮,因为我希望能够使用其他输入,如阅读器,模拟键盘输入。
现在我添加了一个组合框和单选按钮,我打算在将来添加新的东西。我添加组件后再次尝试应用程序,程序不再读取键,因为它试图在组合框内写入。如果我按组合框外,或选择一个选项,什么也没有发生,它继续尝试在其中写入。
如果我按下单选按钮,程序不再尝试在组合框中写入,但它仍然不从键盘读取键,可能是因为现在的焦点在单选按钮上。
如果我把组合框属性设置为Enabled := false,并且我没有按单选按钮,那么它又可以工作了。
我认为问题在于程序的“焦点”在组件上。我查看了组件的属性,但我没有看到任何可以帮助的属性。
有没有一种方法可以让组件的代码或属性不成为程序的焦点?我使用TRadioButtonTComboBoxTAdvComboBox
我使用FormKeyDown事件来获取密钥信息。
程序

TfrmConfigCheck.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
     
end;

字符串

vmpqdwk3

vmpqdwk31#

您需要将窗体上的KeyPreview属性设置为True
如果KeyPreview设置为False,则当某些组件(如TComboBox)具有焦点时,不会调用窗体的onKeyDown事件。
但如果将KeyPreview属性设置为True,则无论窗体上关注的组件是什么,每次按下键时都会调用窗体的onKeyDown事件。
关于你在评论中的其他问题,你不能将TComboBox设置为readonly,但你可以将style属性设置为csDropDownList,这是一种readonly模式,因为用户不能输入任何细节。

9bfwbjaz

9bfwbjaz2#

在您的应用程序表单事件TForm.OnShow下放置Form1.SetFocus;您可以在任何控件的onClickonEnter等下执行此操作以将焦点返回到表单。

相关问题