ข้อความ Delphi XE 6 FMX TreeListVew margin.left ทำให้เกิดข้อผิดพลาดรันไทม์

ฉันต้องย้าย 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;

ฉันจะเขียนโค้ดให้ถูกต้องได้อย่างไร?


person vppavlov    schedule 09.02.2015    source แหล่งที่มา
comment
คุณได้รับข้อผิดพลาดอะไรขณะรันไทม์?   -  person dub stylee    schedule 10.02.2015


คำตอบ (1)


ณ เวลาสร้าง 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;
person Dalija Prasnikar    schedule 11.02.2015
comment
ขอขอบคุณ คุณดาลิชา ปราสนิการ์. - person vppavlov; 13.02.2015