用单例模式实现子窗体在父窗体中显示,得到如下效果:
代码如下:
在子窗体中写入单例模式
'当程序没有焦点的时候,最小化
Private Sub frmStatusUI_Deactivate(senderAs Object, e As EventArgs) Handles Me.Deactivate
If Me.WindowState <>FormWindowState.Minimized Then
Me.WindowState =FormWindowState.Minimized
'Me.ZOrder()
End If
End Sub
Private Shared frmstatus As frmStatusUI
'防止外界用new来创建此类实例
Private Sub New()
' 此调用是设计器所必需的。
InitializeComponent()
' 在 InitializeComponent() 调用之后添加任何初始化。
End Sub
''' <summary>
''' 获得本类实例的唯一全局访问点
''' </summary>
''' <returns>返回窗体</returns>
''' <remarks></remarks>
Public Shared Function GetInstance() AsfrmStatusUI
If frmstatus Is Nothing OrElsefrmstatus.IsDisposed Then
frmstatus = New frmStatusUI()
'父窗体是MDI窗体
frmstatus.MdiParent = frmMDIUI
End If
Return frmstatus
End Function
在MDI窗体中的调用:
Public SubToolStripMenuItem3_Click(sender As Object, e As EventArgs) HandlesToolStripMenuItem3.Click
frmStatusUI.GetInstance.Show()
End Sub
设计过程中还遇到一个问题,就是子窗体的菜单栏跑到父窗体中去了,如图:
其实只要改一下菜单属性就欧克啦,将子窗体中的菜单栏的属性稍加修改,如下图:
allowmerge属性改为false,再试,问题解决啦!
第一次机房的时候没有实现这个功能,这次通过单例模式学会了,当然在弄的时候遇到很多麻烦,最多的可能是不理解,这就说明出来混,总是要还的,所以大家还是踏踏实实的走好每一步吧,这样以后遇到问题才能迎刃而解!