请教高手,如何在panel中嵌入多个窗体并能逐个关闭?(100分) ( 积分: 100 )

  • 主题发起人 主题发起人 peerson
  • 开始时间 开始时间
P

peerson

Unregistered / Unconfirmed
GUEST, unregistred user!
我的主窗体中有一个MainPanel,希望点击toolbar上的button时,能将相应的窗体嵌入显示在MainPanel中(一次只显示一个),需要创建的窗体有6-7个,当点击“关闭当前窗体”button时,要能将当前显示的窗体关闭。
用了N种方法,都不理想,哪位大侠给指点一下迷津?谢谢!
 
我的主窗体中有一个MainPanel,希望点击toolbar上的button时,能将相应的窗体嵌入显示在MainPanel中(一次只显示一个),需要创建的窗体有6-7个,当点击“关闭当前窗体”button时,要能将当前显示的窗体关闭。
用了N种方法,都不理想,哪位大侠给指点一下迷津?谢谢!
 
MDI?我有种感觉你需要好像就是一个MDI体系。。。要不你查查?

当然是猜测了。。可以考虑用虚拟工厂建立你的Forms然后就直接往Panel上放就行了Forms.Parent := Panel;

关闭的时候也不麻烦。直接用Application.ActiveForm.Close;还是Screen.ActiveForm.Close就可以了。。
 
放个列表保存当前的打开的窗体,当切换时修改相应顺序.

关闭时关第一个就可以了.
 
to 田伯光:
感谢您的回答,我不希望使用MDI,MDI有很多不可控制因素。
另:如果用Application.ActiveForm.Close,我想,这样会把MainForm关闭的吧,因为点击button的时候,焦点已经切换至MainForm了。
现在准备用ABC套件中的TFormPanel,但在D7下没有安装成功,呜呜~~~
 
每个窗体做成FRAME方式,然后点关闭用循环检查就行
if (Sender is TButton) then
begin
name := (Sender as TButton).Name;
for i:=0 to Panel1.ControlCount -1 do
begin
if (Panel1.Controls is TFrame) then
begin
name1 := (Panel1.Controls as TFrame).Name;
if (name1 = name) then
begin
(Panel1.Controls as TFrame).Close;
break;
end;
end;
end;
end;
 
procedure OutSys;
var
I: Integer;
begin
//关闭当前打开的窗口
for I:=0 to w_Main.ClientPanel.ComponentCount-1 do
w_Main.MDIChildren.Close;


//清空当前用户信息
USER_ID := '';
USER_Name := '';

end;

这是一个注销的代码
我的写法是主窗体为MID父窗体,子窗体都显示在ClientPanel上面。
 
哦,单是焦点问题就好办了。比如把你按钮换成不能获得焦点的按钮比如Speedbutton或者toolButton.ABC好像我一直没有找到D7的合适的版本,网上有不少说可以装的,但都不好用。
 
to 田伯光:
感谢您的帮助,我已经找到了ABC for D7的安装版本了,可以安装,也可以使用了,如果需要,请加我QQ:6549311,方便以后向您讨教,呵呵。
 

Similar threads

S
回复
0
查看
681
SUNSTONE的Delphi笔记
S
S
回复
0
查看
768
SUNSTONE的Delphi笔记
S
D
回复
0
查看
909
DelphiTeacher的专栏
D
D
回复
0
查看
704
DelphiTeacher的专栏
D
D
回复
0
查看
666
DelphiTeacher的专栏
D
后退
顶部