机房收费系统集锦(一)---打开重复窗体

      做机房重构的时候,发现每次执行打开某个窗体的命令,如打开“注册”,都会新建一个新窗体。

      分析了下原因,因为每个窗体在打开之前都会进行实例化,每次实例化后的都是新窗体,所以会出现这个问题。

       <pre class="vb" name="code">       Dim frmCR As New frmRegister '实例化注册窗体frmRegister    
       frmCR.MDIParent=Me    'frmCR为父窗体的子窗体,Me指父窗体(frmMain)       
       frCR.Show()

 
 

      为解决此问题,我们可以用下面的方法,大家如果有更简单的可以提出来或分享链接~~~

      请看Code。

     

 Public Class PreventSameForm    '防止出现重复窗体
        Public Shared Sub ShowMDIForm(ByVal MDIChildForm As Form, ByVal MDIParentForm As Form)
            Dim MDIChildFrm As Form = MDIChildForm   ' 定义MDI子窗体
            MDIChildFrm.MdiParent = MDIParentForm  ' 定义MDI父窗体
            MDIChildFrm.Show() '打开窗体
        End Sub


        '*过程名称:PreventSameForm
        '*参数说明:MDIParentForm--父窗体;MDIChildForm——子窗体;MDIChildFormName ——子窗体的名字
        '*功能说明:首先检测是否有MDI子窗体,如果没有,则创该MDI子窗体的窗体实例
        '*          如果有,则检测当中有没有其窗体实例,有则激活;没有则创建其窗体实例

        Public Shared Sub PreSameForm(ByVal MDIParentForm As Form, ByVal MDIChildForm As Form, ByVal MDIChildFormName As String)
            '如果没有任何一个MDI子窗体,则创该MDI子窗体的窗体实例
            If MDIParentForm.MdiChildren.Length < 1 Then
                '调用ShowMDIForm过程,显示子窗体
                ShowMDIForm(MDIChildForm, MDIParentForm)
                Exit Sub
            Else
                Dim i As Integer               '定义一个表示循环的整数型变量i
                '定义一个布尔型变量IsFrmSame,True表示重复,False表示不重复
                Dim IsFrmSame As Boolean
                For i = 0 To (MDIParentForm.MdiChildren.Length) - 1    '遍历所有子窗体
                    'Child表示父窗体的某个子窗体
                    Dim Child As Form = CType(MDIParentForm.MdiChildren(i), Form)
                    '若要打开的新窗体和已经打开的窗体命名相同,设为TRUE 并退出循环
                    If Child.Name = MDIChildFormName Then
                        IsFrmSame = True
                        Exit For
                    Else
                        IsFrmSame = False
                    End If
                Next
                '若没有检测到命名相同,则在打开的窗体中检测则激活
                If IsFrmSame = False Then
                    ShowMDIForm(MDIChildForm, MDIParentForm)
                Else
                    Dim MDIChildFrm As Form = CType(MDIParentForm.MdiChildren(i), Form)
                    MDIChildFrm.Activate()
                End If
            End If
        End Sub
    End Class

                   我把它写在了一个类模块里,只需要UI层直接调用就可以了。

你可能感兴趣的:(重构)