多文档如何控制窗体不重复显示?(50分)

  • 主题发起人 主题发起人 homanton
  • 开始时间 开始时间
H

homanton

Unregistered / Unconfirmed
GUEST, unregistred user!
在一个菜单命令中:
MDIChild用
application(Tform2, form2);
form2.show;
的方式创建;
而在form2的close事件中,用action=cafree的方式释放
如果用户再按一次菜单,如何限制form2不重复显示呢?
我在做多文档时碰到这样的问题,不知道如何解决,特到这里来请教高手相助。
 
你创建之前看看form2是否已经有了,有了就不创建了:)

if form2 = nil then//创建
close 中添上form2 := nil;
 
form2:=nil;释放
每次点都重新 create
 
if childForm=nil then begin
Application.CreateForm(TchildForm, childForm);
childForm.show;
end else
BringWindowToTop(childForm.Handle);

另外onformclose:

begin
Action:=caFree;
childForm:=nil;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
if not assigned(form2) then
application.CreateForm(tform2,form2);
form2.show;
end;
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
action:=cafree;
end;

procedure TForm2.FormDestroy(Sender: TObject);
begin
form2:=nil;
end;
 
procedure OpenForm(FormClass: TFormClass; var AForm;
AOwner:TComponent=nil);
//根据窗口类名建立窗口,如果窗口存在则只激活它
var
i: integer;
Child:TForm;
begin
for i := 0 to Screen.FormCount -1 do
if Screen.Forms.ClassType=FormClass then
begin
Child:=Screen.Forms;
if Child.WindowState=wsMinimized then
Child.WindowState:=wsNormal;
Child.BringToFront;
Child.Setfocus;
TForm(AForm):=Child;
exit;
end;
Child:=TForm(FormClass.NewInstance);
TForm(AForm):=Child;
if not assigned(aowner) then aowner:=application;
Child.Create(AOwner);
end;

调用
OpenForm(TForm1,Form1,self);
 
我明白了
一、在创建childform前先判断childform是否已经创建,可以用
if not assigned(childform) then 创建;
或用if childform = nil then 创建;
二、另外,在childform的close或destory中也一定要用childform=nil来释放

谢谢各位朋友的指点,接分。
 
多人接受答案了。
 
后退
顶部