VB6中 怎么让MDI子窗体始终填满父容器,并随MDI窗体的大小改变而改变?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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窗体?楼主可以自行对比一下两个图的优劣:
参考技术A当窗体改变时,同时改变Mdi子窗体的大小即可。
示例:
Private Sub Form_Resize() '当窗体改变时MDIFrom.Width = Me.ScaleWidth '重新设置Mdi子窗体为窗体有效宽度
MDIFrom.Height = Me.ScaleHeight '重新设置Mdi子窗体为窗体有效高度
End Sub 参考技术B 将子窗体的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可以获取机器的系统
或许你可以根据系统来选择应该减除的边框值
来晚了,可能你已经不需要了
winform 怎么让子窗体显示在主窗体上?
一个管理窗体 点按钮后 弹出的子窗体 要显示在主窗体的上面 不能重新打开一个窗体 (像 Web的母版页) 该怎么实现 !!!!
mdi子窗体肯定是现实在父窗体的里面,你说的上面是什么意思?只能打开同一个子窗体的代码:private bool isIn(Form f)foreach (Form fr in this.MdiChildren)
if (fr.GetType() == f.GetType())
return true;
return false;
把子窗体传进去即可 参考技术A private void 图书信息维护ToolStripMenuItem_Click(object sender, EventArgs e)
FrmBookInfo1122 nf = new FrmBookInfo1122();
nf.MdiParent = this;
nf.WindowState = FormWindowState.Maximized;//就是这个嘛?
nf.Show();
参考技术B 新建一个实例。
实例.ShowDialog()
private void 图书信息维护ToolStripMenuItem_Click(object sender, EventArgs e)
FrmBookInfo1122 nf = new FrmBookInfo1122();
nf.MdiParent = this;
nf.WindowState = FormWindowState.Maximized;//就是这个嘛?
nf.Show();
以上是关于VB6中 怎么让MDI子窗体始终填满父容器,并随MDI窗体的大小改变而改变?的主要内容,如果未能解决你的问题,请参考以下文章