Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++builder 在VCL帧中推进控制焦点_C++builder_Vcl_Tframe - Fatal编程技术网

C++builder 在VCL帧中推进控制焦点

C++builder 在VCL帧中推进控制焦点,c++builder,vcl,tframe,C++builder,Vcl,Tframe,我有一个TFrame,上面放着一些TEDIT。这些编辑是 用于串行键输入的框,因为我正在尝试设置用户体验 输入焦点从一个编辑框跳到下一个编辑框,当一定数量的 已在每个字段中输入字符。也就是说,用户不需要按tab键 或者单击下一次编辑以前进 我在C++ Builder中找到了一个关于如何编写(好书)的例子。 “模拟”enter press在编辑中的行为类似于tab press,并且 尝试使用相同的技术。但是,我的应用程序中的某些内容不可用 像那个例子一样工作 在frames按键事件中,我有代码 v

我有一个TFrame,上面放着一些TEDIT。这些编辑是 用于串行键输入的框,因为我正在尝试设置用户体验 输入焦点从一个编辑框跳到下一个编辑框,当一定数量的 已在每个字段中输入字符。也就是说,用户不需要按tab键 或者单击下一次编辑以前进

我在C++ Builder中找到了一个关于如何编写(好书)的例子。 “模拟”enter press在编辑中的行为类似于tab press,并且 尝试使用相同的技术。但是,我的应用程序中的某些内容不可用 像那个例子一样工作

在frames按键事件中,我有代码

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);
...
void\uu快速调用选项卡框架::Edit1KeyPress(TObject*发送方,
系统::WideChar和Key)
{
TEdit*theEdit=动态广播(发送方);
如果(!theEdit)
{
返回;
}
如果(编辑->文本.Length()>=6)
{
//跳转到下一个编辑
执行(WM_NEXTDLGCTL,0,0);
...
但不会发生到下一个控件的“跳转”

主窗体,框架父窗体,确实有key preview==true,我可以 设置断点以查看执行调用是否确实执行

编辑的选项卡顺序为1,2,3,4,5


我想知道这是否与TFrames消息有关,或者?

如果您使用的控件是从TWinControl派生的(如果您使用的是stock VCL控件,则应该是这样),您还可以使用TWinControl->SetFocus()显式地将焦点设置为所需的控件。

两件事:1)您可以使用
OnChange
事件(而不是按键上的
on
),这使这变得更容易,2)您不需要使用
Perform
和发送消息;只需使用
TWinControl.SelectNext
,类似于
theEdit->SelectNext(theEdit,True,True)
(我之所以这样说是因为我更喜欢Delphi而不是C++Builder)并让VCL为您完成所有工作。它正确处理选项卡顺序。这非常好!在builder中,编辑成员函数SelectNext是私有的,因此无法调用,但有一个全局函数SelectNext可以完成此工作。谢谢!