奇怪的CREATE重载
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;
[解决办法]
可以把s='ddddd'放到Form的Create事件中。
如果要重写构造函数,要这样定义
constructor Create(AOwner: TComponent); override;
[解决办法]
根本不会进入TForm1.create;这个不是重载
[解决办法]
要重载的话,要写成这样:
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了。