我有一个mdicontainer表单来传唤表单。我的问题是,当用户再次单击该表单的菜单时,它还会创建该表单的另一个实例。
我所做的就是声明一个带有公共变量的公共类,例如: Boolean isFormOneOpen = false。然后,每次formOne打开时,它首先检查我刚才声明的全局变量是否为假,如果是,则实例化一个formOne的对象,然后显示它。否则,什么也不做。非常静态,想象一下,如果我有许多表单,我必须为每个表单声明一个变量,以检查它是否已经打开。你能为我提供一个解决方案吗?也许是一个接受表单的方法?或者任何更聪明的方式来做这件事。
发布于 2010-08-04 11:27:41
您不需要变量,您可以迭代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发布于 2010-08-04 11:18:06
声明一个窗体类型的变量,而不是布尔值。然后,只需确保变量不是Nothing,并调用它的.Open()方法。这有一个很好的副作用,如果现有的表单实例已经打开,还可以将其放在前面。
更好的是,在VB.Net 2.0及更高版本中,所有表单都有一个默认实例,其名称与其类型相同,因此您只需说FormName.Open()即可使用它。但是,我以前没有在mdi情况下尝试过这一点。
https://stackoverflow.com/questions/3402322
复制相似问题