delphi 子窗体关闭问题

benqlch 2009-04-28 08:25:25
delphi 打开一个子窗体时关闭上另一个打开的子窗体.

我在打开一个子窗体时判断是否有另外的子窗已经体开,如果有关闭已经打开的子窗体, 显示当前我要找开的子窗体.
...全文
367 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
JPEXE 2009-04-28
  • 打赏
  • 举报
回复
建议你用一个主窗体成员变量或用全局变量来保存你每次打开的当前子窗体句柄(FormXXX.Handle),
当你要打开新的子窗体时,就先向你保存的上个子窗体句柄发WM_CLOSE消息来关闭它(用SendMessage),
最后记得把你新开打的子窗体句柄继续保存,以供下次使用.
benqlch 2009-04-28
  • 打赏
  • 举报
回复
写在那里啊
yct0605 2009-04-28
  • 打赏
  • 举报
回复

{只能打开一个mdi窗体}
try
if application.MainForm.MDIChildCount>0 then{判断主窗体里面的子窗体个数是否大于0}
activemdichild.Close;
finally
TForm2.Create(Self);{这是子窗体,MDIChild窗体自己创建自己显示,不用Show}
end;
benqlch 2009-04-28
  • 打赏
  • 举报
回复
TFrmMain.Sys_AboutExecute(Sender: TObject);
是那个事件 
benqlch 2009-04-28
  • 打赏
  • 举报
回复
MDI
阿三 2009-04-28
  • 打赏
  • 举报
回复
补充:
if application.MainForm.MDIChildren[i].Name <>窗体名 then
加个判断

阿三 2009-04-28
  • 打赏
  • 举报
回复
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;

ks_reny 2009-04-28
  • 打赏
  • 举报
回复

//======================================================
//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;
bdmh 2009-04-28
  • 打赏
  • 举报
回复
是MDI的子窗体吗
7年 2009-04-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 benqlch 的回复:]
TFrmMain.Sys_AboutExecute(Sender: TObject);
是那个事件 
[/Quote]
是自己定义的。自己加上就好了。
dinoalex 2009-04-28
  • 打赏
  • 举报
回复
for i := 0 to Screen.FormCount - 1 do
if screen.Forms[i].Owner = MainFrm then .. // 已有打开子窗

//MainFrm.ActiveMDIChild.Close
22222bbb 2009-04-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zxf_feng 的回复:]
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;
[/Quote]


同意

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧