如何制作单个实例表单

时间:2010-08-04 03:14:34

标签: vb.net winforms mdi

我有一个传唤表格的mdicontainer表格。我的问题是,当用户再次单击该表单的菜单时,它还会生成另一个实例。

我所做的是声明一个带有公共变量的公共类ex:Boolean isFormOneOpen = false。然后每次formOne打开时,它首先检查我之前声明的全局变量,如果它是假的,如果是,则实例化formOne的对象然后显示它。否则,什么也不做。非常静态,想象如果我有很多表单,我必须为每个表单声明一个变量来检查它是否已经打开。你能为我提供一个解决方案吗?也许是一种接受表格的方法?或者更聪明的方法来做到这一点。

2 个答案:

答案 0 :(得分:2)

您不需要变量,您可以迭代MdiChildren集合以查看表单是否已打开。例如:

Private Sub btnViewChild_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnViewChild.Click
    For Each child In Me.MdiChildren
        If TypeOf child Is Form2 Then
            child.WindowState = FormWindowState.Normal
            child.Focus()
            Exit sub
        End If
    Next
    Dim frm As New Form2
    frm.MdiParent = Me
    frm.Show()
End Sub

以VB.NET为中心的解决方案:

Private Sub btnViewChild_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnViewChild.Click
    Form2.MdiParent = Me
    Form2.WindowState = FormWindowState.Normal
    Form2.Show
End Sub

答案 1 :(得分:0)

而不是布尔值,声明表单类型的变量。然后确保变量不是Nothing并调用它的.Open()方法。如果现有的表单实例已经打开,它还具有很好的副作用,即将现有的表单实例带到前面。

更好的是,在VB.Net 2.0及更高版本中,所有表单都有一个与其类型同名的默认实例,因此您可以说FormName.Open()并完成它。但是,我之前没有在mdi情况下试过这个。