//====================================================== //findfrm函數用來查找子窗體,若當前打開則在最前面顯示,否則打開 //====================================================== Function findfrm(frmname:String): boolean; var i:integer; begin result:=false; for i:=0 to screen.FormCount-1 do if uppercase(screen.Forms[i].Name)=uppercase(frmname) then begin screen.Forms[i].BringToFront; result:=true; break; end else result:=false; end; //調用函數 procedure Tmainfrm.N5Click(Sender: TObject); begin if not findfrm('auto_workfrm') then begin auto_workfrm:=tauto_workfrm.Create(self); auto_workfrm.Show; end else auto_workfrm.BringToFront; end;
procedure TFrmMain.Sys_AboutExecute(Sender: TObject); var i: integer; begin for i:=0 to application.MainForm.MDIChildCount-1 do begin application.MainForm.MDIChildren[i].Close; end; end;
补充: if application.MainForm.MDIChildren[i].Name <>窗体名 then 加个判断
TFrmMain.Sys_AboutExecute(Sender: TObject); 是那个事件
{只能打开一个mdi窗体} try if application.MainForm.MDIChildCount>0 then{判断主窗体里面的子窗体个数是否大于0} activemdichild.Close; finally TForm2.Create(Self);{这是子窗体,MDIChild窗体自己创建自己显示,不用Show} end;
//======================================================
//findfrm函數用來查找子窗體,若當前打開則在最前面顯示,否則打開
//======================================================
Function findfrm(frmname:String): boolean;
var i:integer;
begin
result:=false;
for i:=0 to screen.FormCount-1 do
if uppercase(screen.Forms[i].Name)=uppercase(frmname) then
begin
screen.Forms[i].BringToFront;
result:=true;
break;
end
else
result:=false;
end;
//調用函數
procedure Tmainfrm.N5Click(Sender: TObject);
begin
if not findfrm('auto_workfrm') then
begin
auto_workfrm:=tauto_workfrm.Create(self);
auto_workfrm.Show;
end
else
auto_workfrm.BringToFront;
end;
var
i: integer;
begin
for i:=0 to application.MainForm.MDIChildCount-1 do
begin
application.MainForm.MDIChildren[i].Close;
end;
end;
if application.MainForm.MDIChildren[i].Name <>窗体名 then
加个判断
是那个事件
{只能打开一个mdi窗体}
try
if application.MainForm.MDIChildCount>0 then{判断主窗体里面的子窗体个数是否大于0}
activemdichild.Close;
finally
TForm2.Create(Self);{这是子窗体,MDIChild窗体自己创建自己显示,不用Show}
end;
当你要打开新的子窗体时,就先向你保存的上个子窗体句柄发WM_CLOSE消息来关闭它(用SendMessage),
最后记得把你新开打的子窗体句柄继续保存,以供下次使用.
if screen.Forms[i].Owner = MainFrm then .. // 已有打开子窗//MainFrm.ActiveMDIChild.Close