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