读书人

如何在一个窗体内打开另一个窗体

发布时间: 2012-06-20 20:37:21 作者: rapoo

怎么在一个窗体内打开另一个窗体

如上图,如何在单击边面的连接字后,把本应弹出的窗体显在右边,我想把所有的窗体连接在通过点左面的连接,在右面打开,以内嵌的方式

[解决办法]
可以用窗口停靠吧。
[解决办法]
右侧放一个panel1,设置新窗口的Parent设置为panel1
[解决办法]
form2.left:=0;
form2.top:=0;
windows.setparent(form2.handle,panel1.handle);
form2.show;
[解决办法]
这种情况,推荐弹出来镶嵌的窗口使用Frame,Frame可以很方便地镶嵌在其它容器(包括WinForm,Panel等),而且Frame的代码是自成单元的,便于代码分离,易于维护。
[解决办法]
用 panel 控件可以实现,很简单
[解决办法]
唉!这么简单的问题,给你一个解决方案。全面的,有代码的!
1、在左侧放一个容器控件(Panel或ScrollBox,我这里使用ScrollBox).
2、窗体打开时代码:

//加载子窗体--------------------------------
procedure TFrm_Main.LoadClientFrom;
var
Frm_Pawn : TFrm_PawnManger;
begin
try
//初始化窗体
Frm_Pawn:=TFrm_PawnManager.Create(application);
//将窗体在ScrollBox中以alClient方式显示,用解释alClient方式吗?
Frm_Pawn.ManualDock(ScrollBox,nil,alClient);
//显示窗体
Frm_Pawn.Show;
except
showmessage('打开窗体时失败');
end;
end;
2、Frm_Pawn窗体的属性配置:
把窗体的Align属性设置为alClient即可。其他都不需要。
3、Frm_Pwan窗体关闭事件:
procedure TFrm_PawnManager.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
Action := caFree; //这句的意思是关闭时自动释放!
end;

以上就可以对一个子窗体进行打开或关闭,但是在实际运用中,看你的界面应该是打开一个关闭另一个窗体。所以这里需要判断当前是否打开子窗体,打开的那个子窗体。然后关闭,具体代码如下:
//循环判断ScroolBox中的子窗体,与各子窗体的类名比对,如果相同则关闭。下面的代码只写了两个子窗体,如果有多个,你都写进去,当然还有更好的办法。不过这个可以凑和用了!
for i := 0 to ScrollBox.DockClientCount - 1 do
begin
if (ScrollBox.DockClients[i] is TFrm_PawnManager) then
begin
TFrm_PawnManager(ScrollBox.DockClients[i]).Close;
TFrm_PawnManager(ScrollBox.DockClients[i]).Free;
break;
end;
if (ScrollBox.DockClients[i] is TFrm_TestInfo) then
begin
TFrm_TestInfo(ScrollBox.DockClients[i]).Close;
TFrm_TestInfo(ScrollBox.DockClients[i]).Free;
break;
end;
end;

读书人网 >.NET

热点推荐