procedure formshow(Sender : TObject); begin ... end;procedure formclose(Sender : TObject); //参数不一定这么多,参考 begin action := caFree; end;var form : TMainForm;begin form := TMainForm.Create(self);
form.onshow := formshow; form.onclose := fomrclose; form .Show(); end;
if assigned(frm) then frm.Close;
窗体不仅一个,要关闭一个动态窗体,就一起把所有的动态窗体一起close.
其它窗体先要引用那个窗体对应的单元, 再用 if Assigned(Form) then
if Assigned(Form) then FreeAndNil(Form);
if Assigned(Form) then FreeAndNil(Form);这个应当在什么情况下用? 用在什么地方.
if Assigned(Form) then FreeAndNil(Form);这个应当在什么情况下用? 用在什么地方. -------------- 关闭你动态创建的窗口 用一个按钮控制即可我觉得你还是把你要做成什么样的效果说具体了
var form : TMainForm; begin form := TMainForm.Create(self); form .Show(); end;TMainForm.Create(self);说明当owner释放的时候自动释放if Assigned(Form) then FreeAndNil(Form); 当FreeAndNil之后,如果再次应用Form,出现错误,直接close就行了,然后在Onclose里面写Action :=CaFree就行了。
var Form1: TForm1; f:array[0..4] of TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject); var i:integer; begin for i := 0 to 4 do begin f[i] := TForm1.Create(self); f[i].Show; end; end;procedure TForm1.Button2Click(Sender: TObject); var i:integer; begin for i := 0 to 4 do begin if Assigned(f[i]) then freeAndNil(f[i]); end; end;
问题是 关闭 动态生成的窗体的时候父窗体没关掉哦 用以上方法 当关闭父窗体的时候都会, access violation at 0x300b3ac0 read of address 0x300b3ac0
问题是 关闭 动态生成的窗体的时候父窗体没关掉哦 用以上方法 当关闭父窗体的时候都会, access violation at 0x300b3ac0 read of address 0x300b3ac0------------------ 注意关闭是点主窗体上的关闭按钮 我没出现你的错误
begin
...
end;procedure formclose(Sender : TObject); //参数不一定这么多,参考
begin
action := caFree;
end;var form : TMainForm;begin
form := TMainForm.Create(self);
form.onshow := formshow;
form.onclose := fomrclose; form .Show();
end;
frm.Close;
if Assigned(Form) then
FreeAndNil(Form);
FreeAndNil(Form);这个应当在什么情况下用? 用在什么地方.
FreeAndNil(Form);这个应当在什么情况下用? 用在什么地方.
--------------
关闭你动态创建的窗口
用一个按钮控制即可我觉得你还是把你要做成什么样的效果说具体了
begin
form := TMainForm.Create(self);
form .Show();
end;TMainForm.Create(self);说明当owner释放的时候自动释放if Assigned(Form) then
FreeAndNil(Form);
当FreeAndNil之后,如果再次应用Form,出现错误,直接close就行了,然后在Onclose里面写Action :=CaFree就行了。
Form1: TForm1;
f:array[0..4] of TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
for i := 0 to 4 do
begin
f[i] := TForm1.Create(self);
f[i].Show;
end;
end;procedure TForm1.Button2Click(Sender: TObject);
var
i:integer;
begin
for i := 0 to 4 do
begin
if Assigned(f[i]) then
freeAndNil(f[i]);
end;
end;
注意关闭是点主窗体上的关闭按钮
我没出现你的错误