【问题标题】:C++ Builder 10.4, FMX: Form TabOrder problemC++ Builder 10.4,FMX:表单 TabOrder 问题
【发布时间】:2020-10-20 10:16:02
【问题描述】:

在控制字段之间切换的 Tab 功能似乎不适用于 C++ Builder 10.4(带有补丁 1、2 和 3),如果包含一些 taborder 字段的表单控件获得另一个父级以编程方式形成控件。

这可以通过创建一个多设备应用程序非常容易地复制,在一个表单上只有 2 个TLayout-controls 和 2 个TEdit-controls:

重现步骤:

  • 创建一个新的多设备应用程序,空白应用程序。这将创建一个带有空白表单的Unit1
  • 对于生成的Unit1,只需将TLayout 从调色板拖放到表单并调整其大小以匹配表单的几乎左半部分。
  • 在表单 (Layout2) 上放置第二个 TLayout 控件并调整此布局的大小以匹配表单的右半部分。
  • 将 2 个TEdit 控制字段拖放到 Layout1(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 也可以工作,但只有在通过鼠标单击选择编辑字段之一之后。
  • 现在,在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 的内容,应“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

【问题讨论】:

  • 它对我来说很好,但我在 10.3.3 上可能就是这样......
  • 好的,谢谢。很高兴知道它适用于其他版本。在我看来,这证实了它是 10.4 中的一个错误。
  • 在 Delphi 10.4.0 中,此问题不可重现。你也可以显示 unit1.fmx 文件吗?
  • 见上文“施耐德信息系统有限公司”。但有人告诉我有一个新版本 10.4.1 ,我不知道......自 2020 年 2 月 2 日起带有补丁 1。我以为我已经安装了最新的 C++Builder,IDE 提到它是最新的补丁 1、2 和 3。但显然不是。所以,我将安装这个10.4.1版本的RadStudio,再次测试,在这里反馈。

标签: firemonkey c++builder c++builder-10.4-sydney


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-20
    相关资源
    最近更新 更多