我需要创建任意数量的动态创建的Form1(MDI)实例
class procedure TForm1.ShowForm;
var
Form1: TForm1;
begin
Form1 := TForm1.Create(nil);
Form1.Show;
end;
关闭:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;
表单有一个调用Form2的按钮。 Form2处理一些东西,显示进度,最后执行一个在其创建时传递的回调函数:
Form1上的回调:
procedure TForm1.MyCallback(icont_process: Integer);
begin
Self.LabelResult.Caption := IntToStr(icont_process)+' processed itens.');
end;
创建Form2:
class procedure TForm2.ShowForm(AMyCallback: TMyCallback);
var
Form2: TForm2;
begin
Form2 := TForm2.Create(nil);
with Form2 do
begin
FMyCallback := AMyCallback;
Show;
end;
end;
回调问题发生在......
如何检查应返回结果的Form1实例是否仍然有效? 如果我关闭Form1,Form2不应该执行回调...我应该如何检查?
答案 0 :(得分:1)
您有两种选择:
在关联的Form1
仍处于打开状态时,不要让Form2
关闭。例如,使用Form2.ShowModal()
代替Form2.Show()
。
如果您必须允许Form2
超过Form1
,请让Form1
保持对其关联的Form2
的引用,然后在Form1
时清除回调指针{1}}已关闭。
private
FForm2: TForm2;
procedure TForm1.FormDestroy(Sender: TObject);
begin
if FForm2 <> nil then
FForm2.FMyCallback := nil;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if FForm2 = nil then
begin
FForm2 := TForm2.Create(Application);
FForm2.FMyCallback := MyCallback;
FForm2.OnDestroy := Form2Destroyed;
end;
FForm2.Show;
end;
procedure TForm1.Form2Destroyed(Sender: TObject);
begin
FForm2 := nil;
end;