Delphi XE 6 FMX TreeListVew 文本 margin.left 导致运行时错误

Delphi XE 6 FMX TreeListVew text margin.left causes an runtime error

我需要向左移动 TreeViewItem.Text。我的代码导致运行时错误。

constructor TVppTreeViewItem.Create(AOwner: TComponent);
 var
 c:TTextControl;
begin
  inherited;
  self.Text:='test';
  self.TextObject.Align:=TAlignLayout.Left;
  self.TextObject.Margins.Left:=50;
end;

如何正确编码?

在创建时 TextObject TTreeItem(和您的 TVppTreeItem)的字段是 nil,访问它会导致 AV 错误。您应该将修改 TextObject 的代码移动到 ApplyStyle 方法,其中 TextObject 将从 Style 初始化。由于无法保证 TextObject 即使在应用样式后仍然有效,因此您应该在尝试对其进行任何操作之前检查它是否存在 nil

  TVppTreeViewItem = class(TTreeViewItem)
  protected
    procedure ApplyStyle; override;
  public
    constructor Create(AOwner: TComponent); override;
  end;

constructor TVppTreeViewItem.Create(AOwner: TComponent);
begin
  inherited;
  self.Text := 'test';
end;

procedure TVppTreeViewItem.ApplyStyle;
begin
  inherited;
  if Assigned(TextObject) then
    begin
      TextObject.Align := TAlignLayout.Left;
      TextObject.Margins.Left := 50;
    end;
end;