【问题标题】:SendToBack seems to not work in Firemonkey?SendToBack 似乎在 Firemonkey 中不起作用?
【发布时间】:2019-01-16 08:58:59
【问题描述】:

我正在使用包含大量控件的主窗体开发 Firemonkey 应用程序。我想创建更多控件并使用SendToBack 将它们发送回去。由于某种原因,这不能按预期工作。控制没有被发送到边后卫,他们停止了 1 个控制。

这是一个示例设置:

  • 创建一个新的 TForm。
  • 在其上放置 3 个按钮,彼此重叠(Button1、Button2、Button3)。
  • 在运行时,调用Button3.SendToBack - 按钮返回,但仅返回 1 个位置。 Button1 仍然是最后面。

检查 TForm 源代码发现SendToBack 调用SendChildToBack,它确定最后位置为:

function TCommonCustomForm.GetBackIndex: Integer;
begin
  Result := 1;
end;

不应该是0吗?

问题:

  • 为什么 SendToBack 将控件发送到“最后一个”位置而不是最后一个位置? GetBackIndex 返回 1 是否有特殊原因?
  • 如何将控件发送到后面?鉴于我的表单有很多控件,并且使用 BringToFront 将除需要控件之外的所有内容发送到前面是不可取的。

【问题讨论】:

    标签: forms delphi firemonkey z-order


    【解决方案1】:

    由于我正在创建自己的控件,

    ctrl := TSomeControl.Create(aForm);
    ctrl.Parent := aForm;
    ctrl.SendToBack;
    

    可以替换为:

    ctrl := TSomeControl.Create(aForm);
    aForm.InsertObject(0 {desired index}, ctrl);
    

    【讨论】:

      猜你喜欢
      • 2017-08-31
      • 2015-05-20
      • 1970-01-01
      • 2019-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      相关资源
      最近更新 更多