1.动态创建的组件Button1在创建时Button1.OnClick:=Button1Click;保存后读出来Button1.OnClick:=Button1Click;
为什么在读出来后点Button1没有反应...
2.在创建Button1时调用TButton.Create();然后保存,在读取时又调用了一次TButton.Create();组件能正常的读取出来.但是Onclick事件调用不到..
3.怎样使动态生成的Button1在创建后保存,读取后都能调用Button1Click???
为什么在读出来后点Button1没有反应...
2.在创建Button1时调用TButton.Create();然后保存,在读取时又调用了一次TButton.Create();组件能正常的读取出来.但是Onclick事件调用不到..
3.怎样使动态生成的Button1在创建后保存,读取后都能调用Button1Click???
Button1.OnClick:=Button1Click这一段你持久化保存了吗?
因为你没有保存所以找不到了。
有没有持久化保存组件的例子,给段吧,谢谢...
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
FButton: TButton;
public
{ Public declarations }
published
procedure ButtonClick(Sender: TObject);
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
FButton := TButton.Create(Self);
FButton.OnClick := ButtonClick;
FButton.Caption := 'Test';
FButton.Parent := Self;
end;procedure TForm1.ButtonClick(Sender: TObject);
begin
ShowMessage('Test');
end;procedure TForm1.Button2Click(Sender: TObject);
var
fs: TFileStream;
begin
fs := TFileStream.Create('C:\Test.dat', fmCreate or fmOpenWrite);
fs.WriteComponent(Self);
fs.Free;
end;procedure TForm1.Button3Click(Sender: TObject);
var
fs: TFileStream;
begin
RegisterClass(TButton);
DestroyComponents;
fs := TFileStream.Create('C:\Test.dat', fmOpenRead);
fs.ReadComponent(Self);
fs.Free;
end;end.
你要对控件的Owner进行持久化,例如你的Button的Owner是Form,在ReadComponent中,它会在Owner中用MethodAddress方法找它的published方法中名称对应的方法地址,然后关联上。如果你仅仅写入的是TButoon,那么它是不知道你的ButtonClick到底在那个类中的。