个人版机房中开始没有考虑子父窗体的设置问题,这样出现什么问题,如果将主窗体关闭,而你的打开窗体仍不会关掉,这是肯定不允许的,网上查了一下,还挺容易。

Private Sub MenuInquirePresentCash_Click(sender As Object, e As EventArgs) Handles MenuInquirePresentCash.Click
        Dim fIPC As New frmInquirePresentCash  '实例化frmInquirePresentCash窗体
        fIPC.MdiParent = Me  '将实例化窗体的父窗体设置为当前Main窗体
        fIPC.Show()
    End Sub

     但是这样的结果是子窗体被父窗体控件覆盖,怎么办?


    记得第一次机房中用到frame容器性质的控件,在.net中找到Panel控件,将主窗体中的控件都放在Panel中,我的做法是每次子窗体打开时将Panel隐藏,退出时再显示。

 Private Sub MenuInquirePresentCash_Click(sender As Object, e As EventArgs) Handles MenuInquirePresentCash.Click
        Dim fIPC As New frmInquirePresentCash  '实例化frmInquirePresentCash窗体
        fIPC.MdiParent = Me  '将实例化窗体的父窗体设置为当前Main窗体
        fIPC.Show()

        Panel1.Visible = False '子窗体打开时 Panel1不可见
    End Sub

    这样问题又来了,如果打开一个子窗体,然后再打开一个,这时选择关闭其中一个的话,这是Panel控件将为可见,也就是说另外一个窗体还是被隐藏。


     一直都是这么做的,但总觉得这么做太没有思想了,偶然看到一清博客也有关于这个问题方案,在U层新建了一个SetMDIChild类,有两种解决方法,一是将子窗体显示在MDI主窗体Panel控件之上,二是将子窗体上的控件内嵌到MDI主窗体panel控件之上,然后再主窗体直接调用这个类的方法。

'/*********************
'类名称:SetMDIChild
'功能:
'命名空间:Charge.UI
'作者:李立平
'小组:
'时间:2014/10/1 11:48:49
'版本号:v2.0.0

'**********************/
Public Class SetMDIChild
    '子窗体显示在MDI主窗体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

End Class

    很好解决了子窗体的最小化和显示问题,美中不足的是一清的方案没有用到单例模式,他在U层类的时候没有将子窗体实例化,所以也是显示一个窗体,所以单例模式还是要用的。因为单例模式在每个子窗体中声明变量和方法,我也没有把得到每个子窗体的实例方法抽象出来,现在想着如何在U层类中调用实例化子窗体的方法,研究中。。。

    遇到问题首先自己思考找方法,然后可以通过和别人交流拓宽自己的思路,身边的小伙伴都是我们的巨人!

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐