上一篇,刚刚讲到,使用Setparent函数可以解决pictureBox和MDI子窗体的显示问题。
从一开始,我们就走进了一个误区,在MDI窗体只能添加有对其属性的控件。例如toolbar,status,等。
其实,在MDI窗体上放置PictureBox控件。我们就已经钻进了牛角尖。
既然在MDI窗体上不能添加无对齐属性的控件。那么就需要引入一个容器控件,在容器控件中添加其他控件。
其实,我们可以用一个form作为一个容器来使用。
首先把form设置成无边框。这样才能使得form作为容器使用。
这样显示出来,在设置一下form1的长宽,就可以充当MDI窗体的容器控件了。
首先这样做,有一个弊端,那就是form1窗体具有焦点属性,当有其他MDI子窗体浮于form1窗体之上的时候,你在点击form1窗体,那么你正在使用的子窗体就被form1覆盖,而无法显示。
对于不使用的窗体,我们使用的操作通常是最小化。所以对于系统中其他子窗体需要添加一个事件。
Private SubForm_Deactivate() '当程序没有焦点的时候,最小化 If Me.WindowState <> 1 Then Me.WindowState = 1 'Me.ZOrder End If End Sub
这样就可以解决form1浮于子窗体之上的情况。
对于MDI子窗体最小化后通常是下面这种情况:
但是,我们使用了form1作为MDI窗体的容器,会发现,当我们使用最小化进行操作的时候,最小化后的标题,也会隐藏在form1的后面,而无法显示出来。
面对这么多的问题,那么使用form也不是很简单啊。如果能把form1设置成一个没有焦点的对象。那么这些问题就轻松解决了。不过笔者,没有找到这种办法。
所以,笔者采用了把 form1的高度缩短了,这样form1就无法挡住 MDI子窗体最小化后的菜单了。
看起来还是很不美观。所以笔者思前思后,好像MDI窗体的颜色也可以改吧。
至于上文提到的MDI子窗体最大化后,子窗体的标题栏位于MDI菜单栏下方的问题,也不会出现。
将form2最大化后的效果图:
如果读者有更好的方法,请留言。共同进步。