C++ Builder 10.4,FMX:表单 TabOrder 问题
C++ Builder 10.4, FMX: Form TabOrder problem
在控制字段之间切换的 Tab 功能似乎不适用于 C++ Builder 10.4(带有补丁 1、2 和 3),如果表单控件包含一些 taborder字段,以编程方式获取另一个父表单控件。
这可以很容易地通过创建一个多设备应用程序来重现,在一个表单上只有 2 个 TLayout
-控件和 2 个 TEdit
-控件:
重现步骤:
- 创建一个新的多设备应用程序,空白应用程序。这将创建一个带有空白表单的
Unit1
。
- 对于生成的
Unit1
,只需将 TLayout
从调色板拖放到表单中并调整其大小以匹配几乎表单的左半部分。
- 在表单 (Layout2) 上拖放第二个
TLayout
控件并调整此布局的大小以匹配表单的右半部分。
- 在 Layout1(Edit1 和 Edit2)上放置 2
TEdit
个控制字段。
- 对于 Layout1,将
TabOrder
属性 设置为 0,并确保 属性 TabStop
设置为 True
。
- 对于 Layout2,将
TabOrder
属性 设置为 1,并确保 属性 TabStop
设置为 True
。
- 对于 Edit1,将
TabOrder
属性 设置为 0,确保 属性 TabStop
设置为 True
,并将文本设置为“编辑 1".
- 对于 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
后继续工作。
Unit1.fmx 的内容,应“Schneider Infosystems Ltd”的要求:
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
是的!
安装“C++ Builder 10.4.1”后即可使用!
所以,这是 10.4 中的一个错误。
我必须执行更多操作来构建和测试我关心的所有现有软件,但我很高兴 TAB-key 功能似乎已解决! :)
我必须完全卸载和安装 RadStudio。第三方软件也必须在 IDE 中再次集成。很多工作。我一直想知道为什么这是必要的,并且无法通过 10.4 版中的“GetIt”补丁更新来解决。
在控制字段之间切换的 Tab 功能似乎不适用于 C++ Builder 10.4(带有补丁 1、2 和 3),如果表单控件包含一些 taborder字段,以编程方式获取另一个父表单控件。
这可以很容易地通过创建一个多设备应用程序来重现,在一个表单上只有 2 个 TLayout
-控件和 2 个 TEdit
-控件:
重现步骤:
- 创建一个新的多设备应用程序,空白应用程序。这将创建一个带有空白表单的
Unit1
。 - 对于生成的
Unit1
,只需将TLayout
从调色板拖放到表单中并调整其大小以匹配几乎表单的左半部分。 - 在表单 (Layout2) 上拖放第二个
TLayout
控件并调整此布局的大小以匹配表单的右半部分。 - 在 Layout1(Edit1 和 Edit2)上放置 2
TEdit
个控制字段。 - 对于 Layout1,将
TabOrder
属性 设置为 0,并确保 属性TabStop
设置为True
。 - 对于 Layout2,将
TabOrder
属性 设置为 1,并确保 属性TabStop
设置为True
。 - 对于 Edit1,将
TabOrder
属性 设置为 0,确保 属性TabStop
设置为True
,并将文本设置为“编辑 1". - 对于 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
后继续工作。
Unit1.fmx 的内容,应“Schneider Infosystems Ltd”的要求:
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
是的! 安装“C++ Builder 10.4.1”后即可使用! 所以,这是 10.4 中的一个错误。
我必须执行更多操作来构建和测试我关心的所有现有软件,但我很高兴 TAB-key 功能似乎已解决! :)
我必须完全卸载和安装 RadStudio。第三方软件也必须在 IDE 中再次集成。很多工作。我一直想知道为什么这是必要的,并且无法通过 10.4 版中的“GetIt”补丁更新来解决。