VB6中 怎么让MDI子窗体始终填满父容器,并随MDI窗体的大小改变而改变?

VB6中 怎么让MDI子窗体始终填满父容器,并随MDI窗体的大小改变而改变?不是最大化,只是填满。

网上找到C#的MDI子窗体有这样的功能,不知道VB6有没有,求解。

c# winform mdi子窗体始终填满父容器并随父容器改变大小
ChildForm f = new ChildForm();
f.MdiParent = this;
f.Parent = this.splitContainer1.Panel2;
f.Show();
f.Dock = DockStyle.Fill; //实现此功能的语句

关于楼主说的“最大化之后,其它MDI子窗体就显示不出来了”,这种说法是错误的。

 

上图中,同时打开了测试A、测试B子窗体,且窗体最大化。

子窗体最大化时,在菜单栏前面出现窗体图标(图标以当前的子窗体图标为准)。

点击此图标,可以看到最下面的“下一个”命令,点击它即可切换子窗体。

同时,不难发现,下一个的快捷键是 Ctrl + F6 组合键,

因此,只要按下 Ctrl + F6 组合键,也可以达到切换子窗体的目的。

注意:上面说的切换子窗体,是指在已经打开的子窗体之间切换。

 

值得一提的是,如果楼主采用了此方案,那么,不必使用任何代码就能实现:

当主窗体改变大小时,所有当前打开的子窗体的最大化不变。。

 

另外,如果你够细心,能够看到在窗体的下方工具栏内测试A、测试B的字样。。

你也可以通过点击测试A、测试B切换对应的子窗体。

当然,实现这样的功能代码有些麻烦,需要动态添加删除工具栏内当前打开、关闭的子窗体名称

因为我只是简单测试了下可行性,这里就不给出具体的代码了,有兴趣的话可以自行研究。。

 

最后,是我对楼主要求窗体非最大化,随主窗体改变大小而始终保持最大的一点看法。

我觉得这样的主、子窗体关系既不美观,又彻底遮挡住了其他已经打开的子窗体。反而更不容易在子窗体之间切换!下图中,如何切换到测试B窗体?楼主可以自行对比一下两个图的优劣:

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-05

当窗体改变时,同时改变Mdi子窗体的大小即可。

示例:

Private Sub Form_Resize() '当窗体改变时
MDIFrom.Width = Me.ScaleWidth '重新设置Mdi子窗体为窗体有效宽度
MDIFrom.Height = Me.ScaleHeight '重新设置Mdi子窗体为窗体有效高度
End Sub

第2个回答  2013-03-05
将子窗体的windowstate设定为2 maximized就行了追问

说了,不是最大化,最大化之后,其它MDI子窗体就显示不出来了。

追答

可以在ReSize 事件里改变子窗体大小,注意 请设置Mdiform的scrollbar为false
Private Sub MDIForm_Resize()
With Form1
.Width = Me.Width
.Height = Me.Height
End With
End Sub

追问

这样设置大了,超出范围了,而且不同系统的边框不一样,又不能减去一个固定值~

追答

Private Sub MDIForm_Resize()
On Error Resume Next
With Form1
.Top = 0
.Left = 0
.Width = Me.Width - 200
.Height = Me.Height - 550
End With
End Sub
这样的话 估计就能设置差不多值了,
先将Mdiform的scrollbar为false

追问

不能实现根据不同系统自动调整么?比如说XP和win7,他们的边框不一样,肯定会不满或者多出来的~

追答

vb可以获取机器的系统
或许你可以根据系统来选择应该减除的边框值

本回答被提问者采纳
第3个回答  2019-01-19
f.Dock = DockStyle.Fill
来晚了,可能你已经不需要了
相似回答