【问题标题】:Delphi XE 6 FMX TreeListVew text margin.left causes an runtime errorDelphi XE 6 FMX TreeListVew text margin.left 导致运行时错误
【发布时间】:2015-02-09 23:05:56
【问题描述】:
我需要将 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;
如何正确编码?
【问题讨论】:
标签:
delphi
firemonkey
delphi-xe6
【解决方案1】:
在创建时TTreeItem(和您的TVppTreeItem)的TextObject 字段是nil,访问它会导致 AV 错误。您应该将修改TextObject 的代码移动到ApplyStyle 方法,其中TextObject 将从样式初始化。由于无法保证 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;