【问题标题】:How to create Tgrid at runtime如何在运行时创建 Tgrid
【发布时间】:2020-09-12 08:20:48
【问题描述】:

我是 Delphi 创建运行时 Tgrid 的新手,想添加一些行和列。我用谷歌搜索但没有得到任何东西。我在零级。我尝试过的我在下面提到过。这段代码在我的表单上没有显示任何内容。

procedure TForm1.Button1Click(Sender: TObject);
var
  Grid : TGrid;
begin
  Grid := TGrid.Create(Form1);
  Grid.Visible := True;
  Grid.Margins.Left := 10;
  Grid.Margins.Right := 10;
  Grid.Margins.Top := 10;
  Grid.Margins.Bottom := 10;
  Grid.RowCount := 5;
end;

【问题讨论】:

  • 这个Q本质上是stackoverflow.com/questions/1005373/…的子Q。
  • 请不要在收到答案后编辑您的问题。特别是不要破坏其他人所做的编辑,除非您非常确定您需要这样做。我回滚到以前的版本。
  • @TomBrunberg 好的

标签: delphi firemonkey delphi-10-seattle


【解决方案1】:

网格控件必须有一个父控件。确实,系统自然必须知道在哪里(在屏幕上)才能让您控制!

您可能希望网格将表单作为其父级。如果是这样,只需在网格构建后添加Grid.Parent := Form1;即可。

当然,当您添加这行缺失的代码并查看网格时,您很快就会注意到您的Margins 分配没有任何效果。这是因为默认情况下,您使用其 TopLeftHeightWidth 属性手动控制控件的位置(没有双关语)。

但是如果您开始尝试使用Align 属性,您会发现边距的效果,如果您还将AlignWithMargins 设置为True。例如,如果将Align 设置为alClient,控件将占据其父级的所有客户区,保留边距。

【讨论】:

  • + 不使用TAlign 设置TMargins 没有任何好处
  • @Sami 是完全正确的。仅当您还将Align 属性设置为alNone 以外的其他值,并将AlignWithMargins 设置为True 时,边距才会生效。
  • 您可以随时编辑答案以包含更多有用的内容@Andreas Rejbrand :)
  • 将列表框控件作为父控件是不寻常的,尤其是当您使用alClient 时(RHS 可以单独为alClient),因为这样整个列表框将被隐藏!
  • @DharmeshBhagatwala 要创建一个专栏,请写TColumn.Create(Grid).Parent := Grid;。该列是使用 Grid 作为所有者和父级创建的。使用Grid.Columns[i] 访问列的属性,其中i 是从0 开始的索引。
猜你喜欢
  • 2020-11-20
  • 1970-01-01
  • 2014-10-26
  • 1970-01-01
  • 1970-01-01
  • 2021-09-03
  • 2014-08-13
  • 2017-02-24
  • 1970-01-01
相关资源
最近更新 更多