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;
我需要向左移动 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;