打开一个mdi子窗口,如何关闭其它的mdi子窗口呢?(100分)

  • 主题发起人 主题发起人 newhfy
  • 开始时间 开始时间
N

newhfy

Unregistered / Unconfirmed
GUEST, unregistred user!
我在打开一个mdi子窗口时,同时关闭其它的mdi子窗口,总是出现不如意的情况:不能打开已打开的mdi子窗口(因为打开它,先要关闭他),或者打开一个mdi子窗口,虽原来的mdi子窗口已关闭,但新打开的mdi子窗口位置不对,没有靠左,而是延着已关闭的mdi子窗口靠左。 我的mdi子窗口中的align为alLeft。
 
循环一下,可以将Application中MDI主窗体的所有子窗体关闭
 
都最大化再显示
 
同意spymaster外加,判断不是当前子窗何等。加Action:=cafree
 
把所有mdi全部最大化
 
先关闭其他窗口再打开新的窗口
 
Tfrmmain是主窗口

procedure Tfrmmain.CloseChildForm;
var
I: Integer;
begin
if MDIChildCount<>0 then
begin
with Frmmain do
for I := MDIChildCount-1 downto 0 do
MDIChildren.Close;
end;
end;
 
for i:= 0 to screen.formcount - 1 do
if screen.forms.name <> 'A' then screen.forms.close;
打开新的窗口
 
好像没有什么简单的好办法解决,我建议你用第一种方法,效率低点位置可以控制。
要不就拦截子窗体产生等事件,在事件中确定子窗体显示位置,不过太麻烦点。
 
谢谢楼上各位的回答!
用algin=alclient,窗口最大化是可以啊,但做出来的form不漂亮啊,有没有解决上述问题的方法呢?
在关闭与打开mdi子窗口之间加入showmessage(''),就可以了。 但这样就很不方便且不合理啊!

 
如果楼上一次只需要打开一个子窗体的话,我建议不要使用MDI窗体,可以采用SDI窗体
在SDI窗体上放一个abcFormPanel就可以随便控制了
 
Tfrmmain是主窗口
procedure Tfrmmain.CloseChildForm;
var
I: Integer;
begin
if MDIChildCount<>0 then begin
with Frmmain do
for I := MDIChildCount-1 downto 0 do
MDIChildren.Close;
end;
end;

在子窗體的OnActive中加入
Top:=FrmMain.ClientRect.Top;
Left:=FrmMain.ClientRect.Left;
 
在子窗体onclose事件下
action:=cafree;
 
谢谢各位了,Konan的方法可行!主要是要在子窗體的OnActive中加入
Top:=FrmMain.ClientRect.Top;
Left:=FrmMain.ClientRect.Left;

 
已分配分数了。
 
后退
顶部