我有一个传唤表格的mdicontainer表格。我的问题是,当用户再次单击该表单的菜单时,它还会生成另一个实例。
我所做的是声明一个带有公共变量的公共类ex:Boolean isFormOneOpen = false。然后每次formOne打开时,它首先检查我之前声明的全局变量,如果它是假的,如果是,则实例化formOne的对象然后显示它。否则,什么也不做。非常静态,想象如果我有很多表单,我必须为每个表单声明一个变量来检查它是否已经打开。你能为我提供一个解决方案吗?也许是一种接受表格的方法?或者更聪明的方法来做到这一点。
答案 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情况下试过这个。