0

如果包含一些 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程序的构造函数中:Layout2Layout1
    #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
4

1 回答 1

0

是的!安装“C++ Builder 10.4.1”后即可使用!因此,这是 10.4 中的一个错误。

我必须做更多的操作来构建和测试我关心的所有现有软件,但我很高兴 TAB 键功能似乎得到了解决!:)

我必须对 RadStudio 进行完整的卸载和安装。第三方软件也必须再次集成到 IDE 中。很多工作。我一直想知道为什么这是必要的,并且无法通过版本 10.4 中的“GetIt”补丁更新来解决。

于 2020-10-21T19:27:54.863 回答