type
  TForm1 = class(TForm)
    procedure RzButton1Click(Sender: TObject);
  public
    s:string;
    constructor create;
  published
      RzButton1: TRzButton;
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
{ TForm1 }
constructor TForm1.create;
begin
inherited create(nil);
s:='ddddddddd';
end;procedure TForm1.RzButton1Click(Sender: TObject);
begin
showmessage(s);  //点击按钮没有显示dddddd 却显示为空 为什么?
end;

解决方案 »

  1.   

    可以把s='ddddd'放到Form的Create事件中。如果要重写构造函数,要这样定义
    constructor Create(AOwner: TComponent); override;
      

  2.   

    根本不会进入TForm1.create;这个不是重载
      

  3.   

    要重载的话,要写成这样:
    constructor create; reintroduce; overload;因为这个create没有被调用到(查看菜单Project -> View Source,会看到Application.CreateForm(TForm1, Form1),其内部调用的是Instance.Create(Self),相当于Form1 := TForm1.Create(Self)),所以点击按钮后s还是默认的空值。如果是这样创建的Form1 := TForm1.Create,那末s就是ddddddddd了。