我正在尝试设置执行以下操作的按钮:
但是,我尝试了一些不同的方法,它总是创建一个新表单(如果我使用frm_About.visible作为检查)或者根本不做任何事情(使用以下代码)。
Private Sub counter_aboutClick(sender As Object, e As EventArgs) Handles counter_About.Click
If Application.OpenForms().OfType(Of frm_About).Any Then
frm_About.BringToFront()
Else
Dim oAbout As frm_About
oAbout = New frm_About()
oAbout.Show()
oAbout = Nothing
End If
End Sub
我听说在某些情况下BringToFront存在错误,我是否遇到过该错误?
答案 0 :(得分:4)
VB.Net做了一件可怕的事情,并创建了一个表单的默认实例(可以通过其类名称引用)。这会产生无穷无尽的混乱和头痛 - 我建议你阅读默认实例(谷歌可以找到很多内容,当然)
在这种情况下,您有一个名为frm_About
的类以及该表单的默认实例,也称为frm_About
。如果您已创建了frm_About
类型的新表单,请输入以下代码
If Application.OpenForms().OfType(Of frm_About).Any Then
frm_About.BringToFront()
将搜索您的打开表单以查找frm_About
类型的表单,如果找到,则会尝试将frm_About
的默认实例放在前面 - 请注意打开的表单可以be(在您的情况下很可能)不是默认实例,而是使用New frm_About()
创建的任何实例。
要查找表单的实际实例,您必须执行以下操作:
For Each openForm In Application.OpenForms()
If TypeOf (openForm) Is frm_About Then _
CType(openForm, frm_About).BringToFront()
Next