自己写一个组件的一个属性如下:
private
  FBody:TStrings;
  ...
  procedure SetBody(MyBody:TStrings);
published
   ...
   property Body:TStrings read FBody write SetBody;
注册好这个组件,放一个到窗体上,这时在属性编辑器窗口中点一下Body这个属性,
弹出Cannot assign a nil to a TRichEditStrings的错误。
请问怎样使用TStrings类型的属性??????????

解决方案 »

  1.   

    你在CREATE事件里没有给BODY赋初始值
    参看:
    constructor TCustomMemo.Create(AOwner: TComponent);
    begin
      inherited Create(AOwner);
      Width := 185;
      Height := 89;
      AutoSize := False;
      FWordWrap := True;
      FWantReturns := True;
      FLines := TMemoStrings.Create;
      TMemoStrings(FLines).Memo := Self;
    end;
      

  2.   

    到底是给FBody赋值还是给Body赋值?
    我两个都有.Create的.还是会出现Cannot assign a nil to a TRichEditStrings的错误!!!我要的是能够在设计期使用属性编辑器编辑TStrings类型的属性的值!
      

  3.   

    FBody是否 初始化 ;
    而且 不能用Tstrings创建实例,而要用TSTRINGLIST创建其实例
      

  4.   

    我们说个简单点的:
    有个组件属性如下:
    TMyClass=class(TComponent)
    private
      FPort:Integer;
      procedure SetPort(Value:Integer);
    published
      property Port:Integer read FPort write SetPort; 
    public
      Constructor create;
    ....
    Constructor TMyClass.Create;
    begin
      FPort:=5050;
      ....
    end;
    按装好这个组件之后,拖一个放到窗体上,然后看看属性编辑器中的Port并不是5050
    而是0.而我的目的是把它放在窗体上的时候port自动=5050.thanks!
      

  5.   

    TStrings是个抽象类,不能建立实例把你控件中的TStrings全部换成TStringList就没问题了!!!
      

  6.   

    你试试在这条语句property Port:Integer read FPort write SetPort 后再加上Default 5050试试看!
      

  7.   

    试试将Constructor create;
    =>
    constructor Create(aOwner: TComponent); override;
      

  8.   

    严重同意alphax,必须用这个重载的构照函数
    已利于窗体设计器来调用
      

  9.   

    你在你写的这个组件的构造器中有没有把FBody创建呀?