MDI父窗体加背景图,在网上有大量的代码,大都是在MdiClient里加绘制命令。在实际使用中发现这种方法效果不错,但有一定限制,比如,只能加背景图片,背景色,加点文字提示或者其它控件就没有办法了(Controls.Add试过,不好用,或许有其他办法,但我没找到)
于是想到一个变通的办法,加MDI子窗体,并保持{zd0}化,且位置永远在{zd2}层,操作过程如下:
1。新建一窗体,命名为frmBack,为保证显示效果,Text设为空,ControlBox设为无,ShowIcon,ShowInTaskBar设为false;FormBorderStyle设为无(这样{zd0}化后与父窗体无缝结合),在窗体上设置背景图,加控件,随心所欲地设置吧。。。。。。。。。(加背景图的话注意BackImageLayOut属性)
2。在父窗体LOAD事件处理程序里加如下代码(openMDI代码参考)
//显示背景
frmBack frmb = new frmBack();
frmmain.openMDI(frmb, true);
frmb.Dock = DockStyle.Fill;
3.在父窗体的 MdiChildActivate事件代码里加如下列代码:
{
if(this.ActiveMdiChild.Name=="frmBack")
foreach (Form f in this.MdiChildren)
if (f.Name != "frmBack") f.Activate();//或f.BringToFront();
}
原理分析:
1。通过dock设为Fill使其自动布满父窗体。
2。当被xx时自动逐个xx其他窗体,使其他窗体自动到前层。