C ++ Builder 10.4,FMX:表单TabOrder问题

问题描述

在控制字段之间切换的 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,并将文本设置为“ 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中执行相同的步骤,则在将Layout1的父级设置为Layout2之后, Tab 功能将继续工作。

“施耐德信息系统有限公司”所要求的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

解决方法

是的! 安装“ C ++ Builder 10.4.1”后,它可以工作! 因此,这是10.4中的错误。

我必须采取更多措施来构建和测试我关心的所有现有软件,但我很高兴TAB键功能似乎已经解决! :)

我必须做一个完整的deïnstall并安装RadStudio。同样,第三方软件也必须再次集成到IDE中。大量的工作。我一直在想为什么这是必要的,而无法用10.4版中的“ GetIt”补丁更新解决。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...