0

我有一个放置一些 TEdit 的 TFrame。这些编辑是用于串行键输入的框,因为我正在尝试设置一种用户体验,其中输入焦点从一个编辑框跳到下一个编辑框,当在每个编辑框中输入一定数量的字符时。也就是说,用户无需按 Tab 或单击下一个编辑即可前进。

我在 C++ Builder HowTo 书(一本好书)中找到了一个示例,介绍了如何“模拟”输入按下以在编辑中表现得像一个制表键,并试图采用相同的技术。但是,我的应用程序中的某些内容不像该示例那样工作。

在框架 KeyPress 事件中,我有代码

void __fastcall TAboutFrame::Edit1KeyPress(TObject *Sender, 
System::WideChar &Key)
{
 TEdit* theEdit = dynamic_cast<TEdit*>(Sender);
 if(!theEdit)
 {
     return;
 }

 if(theEdit->Text.Length() >= 6)
 {
     //jump to next edit
     Perform(WM_NEXTDLGCTL, 0, 0);
...

但是不会发生“跳转”到下一个控件。

主窗体,即框架父级,确实有关键预览 == true,我可以设置一个断点来查看 Perform 调用确实已执行。

编辑的标签顺序是 1,2,3,4,5。

我想知道这是否与 TFrames 消息传递有关?

4

1 回答 1

0

如果您使用的控件来自 TWinControl(如果您使用的是普通 VCL 控件,它们应该这样做),您还可以使用 TWinControl->SetFocus() 将焦点显式设置为所需的控件。

于 2014-12-12T23:19:46.120 回答