如果包含一些 taborder 字段的表单控件以编程方式获取另一个父表单控件,则在控件字段之间切换的Tab功能似乎不适用于 C++ Builder 10.4(带有补丁 1、2 和 3)。
这可以通过创建一个多设备应用程序很容易地重现,在一个表单上只有 2 个TLayout
控件和 2 个控件:TEdit
重现步骤:
- 创建一个新的多设备应用程序,空白应用程序。这将创建
Unit1
一个空白表单。 - 对于生成的
Unit1
,只需将 aTLayout
从 Palette 拖放到表单并调整其大小以匹配表单的几乎左半部分。 - 在窗体 (Layout2) 上放置第二个
TLayout
控件并调整此布局的大小以匹配窗体的右半部分。 TEdit
在 Layout1 上放置 2 个控制字段(Edit1 和 Edit2)。- 对于 Layout1,将
TabOrder
属性设置为 0,并确保将属性TabStop
设置为True
。 - 对于 Layout2,将
TabOrder
属性设置为 1,并确保将属性TabStop
设置为True
。 - 对于 Edit1,将
TabOrder
属性设置为 0,确保属性TabStop
设置为True
,并将文本设置为“edit1”。 - 对于 Edit2,将
TabOrder
属性设置为 1,确保属性TabStop
设置为True
,并将文本设置为“edit2”。 - 构建并运行项目:出现带有 2 个编辑字段的表单,Tab您可以在这些字段之间切换。还行吧!如果
Layout1
属性的值TabOrder
保持为 -1,则Tab它也可以工作,但只有在通过鼠标单击选择 1 个编辑字段之后。 - 现在,在作为父级的
TForm1
程序的构造函数中:Layout2
Layout1
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.fmx"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
Layout1->Parent = Layout2;
}
- 再次构建并运行该项目。表单上编辑字段的位置现在按预期更改为右侧。但是那里的Tab功能消失了!
为什么?如果在 C++ Builder 10.2 中执行相同的步骤,则Tab在将父级设置为 后,该功能将继续Layout1
工作Layout2
。
根据“Schneider Infosystems Ltd”的要求,Unit1.fmx 的内容:
object Form1: TForm1
Left = 0
Top = 0
Caption = 'Form1'
ClientHeight = 480
ClientWidth = 640
FormFactor.Width = 320
FormFactor.Height = 480
FormFactor.Devices = [Desktop]
OnShow = FormShow
DesignerMasterStyle = 0
object Layout1: TLayout
Position.X = 8.000000000000000000
Position.Y = 8.000000000000000000
Size.Width = 305.000000000000000000
Size.Height = 409.000000000000000000
Size.PlatformDefault = False
TabOrder = 0
object Edit1: TEdit
Touch.InteractiveGestures = [LongTap, DoubleTap]
TabOrder = 0
Text = 'edit1'
Position.X = 64.000000000000000000
Position.Y = 72.000000000000000000
end
object Edit2: TEdit
Touch.InteractiveGestures = [LongTap, DoubleTap]
TabOrder = 1
Text = 'edit2'
Position.X = 64.000000000000000000
Position.Y = 112.000000000000000000
end
end
object Layout2: TLayout
Position.X = 328.000000000000000000
Position.Y = 8.000000000000000000
Size.Width = 305.000000000000000000
Size.Height = 409.000000000000000000
Size.PlatformDefault = False
TabOrder = 1
end
end