您的位置:首页 > 其它

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

2014-05-25 21:56 211 查看
做机房重构的时候,发现每次执行打开某个窗体的命令,如打开“注册”,都会新建一个新窗体。

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

<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层直接调用就可以了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: