您的位置:首页 > 其它

【机房重构】--Panel控件解决MDI窗体显示

2017-06-11 18:00 204 查看

问题:

第一版机房收费系统在MDI窗体上添加了PictureBox控件,子窗体不显示,后来又运用了SetParent函数解决的。这次用了一个很好用的控件Panel,重构版的机房出现了同样的问题。

作用:

是一个容器控件,可以用于为其他控件提供可识别的分组。

对比GroupBox

类似于GroupBox控件,但只有 Panel 控件可以有滚动条,而且只有 GroupBox 控件显示标题。

Demo 解决子窗体不显示

思路:

让子窗体显示在panel控件之前

子窗体的控件内嵌到MDI窗体panel控件上

'设置子窗体在panel控件之前的方法
Public Sub SetMDIChildFront(frm As Form, Panel1 As Panel)
frm.TopLevel = False   '设置它的顶级为false
frm.FormBorderStyle = Windows.Forms.FormBorderStyle.Sizable   '设置子窗体的边框风格
frm.Parent = Panel1   '设置子窗体的父容器控件是panel控件
frm.Show()  '子窗体显示
frm.BringToFront()  '设置子窗体在最前面
End Sub

'子窗体上的控件内嵌到MDI主窗体panel控件之上
Public Sub setMDIchild(frm As Form, Panel1 As Panel)
frm.FormBorderStyle = FormBorderStyle.None  '改变frmmain的边框风格,为无边框风格
frm.TopLevel = False  '不将子窗体设置为顶级窗体
Panel1.Controls.Add(frm)  '设置panel控件中控件集合应该包括frm子窗体
frm.Show()
End Sub

'在菜单栏控件按钮下的调用:以查询上机状态为例
'这里调用了第一种子窗体显示在panel控件之前的方法。
Private Sub 查看上机状态ToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles 查看上机状态ToolStripMenuItem.Click
Call SetMDIChildFront(frmOnlineStauts, Panel1)
End Sub


总结

使用panel控件和调用SetMDIchildfront方法解决了子窗体的最小化和显示问题,但是缺点是没有用到单例模式。在尝试单例模式的过程中,在每个子窗体里面声明变量和方法觉得有点麻烦,想要找到将其抽象出来的办法,正在学习ing,,,
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: