【机房重构】--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,,,相关文章推荐
- 机房收费中Panel控件解决子父窗体显示
- C# 解决panel或者其他控件叠加时,此控件背景透明,显示的背景色为窗体背景色问题
- 机房收费系统-MDI窗体控件不能放置以及子窗体不能显示问题
- 机房收费系统--MDI窗体不能放控件和子窗体不能显示
- 子窗子显示在MDI主窗体panel控件之上
- 【机房重构】——使用DataGridView控件轻松显示数据(一)
- C# Winform 左侧菜单右边显示、子窗体显示在主窗体(子窗体当控件添加到Panel)
- 非模态窗体中控件不显示的问题解决
- C# Winform MDI窗体,父窗体控件覆盖子窗体的解决办法
- 机房重构——DataGridView数据显示,窗体显示
- Flex中解决使用TabNavigator控件不能显示Alert.Show()窗体的方法
- 【机房收费系统】MDI菜单显示子窗体
- 让子窗体显示在主窗体的一个Panel控件里
- c#如何将子窗体显示到父窗体的容器(panel)控件中
- c#如何将子窗体显示到父窗体的容器(panel)控件中
- 机房重构---MDI窗体+单例模式
- 【机房收费】---(窗体显示) 实时错误426 只允许一个MDI窗体 (二)
- 一个问题——在MDI窗体中添加控件后显示子窗体
- ExtJS让被遮盖的窗体显示在最前面以及解决Ext.MessageBox提示框被TabPanel覆盖的方法【转】