我正在按代码创建表单。
我正在使用此代码
Dim frmNew As New Form2
If frmNew.ShowInTaskbar = True Then
frmNew.Close()
End If
Dim b As Button = DirectCast(sender, Button)
frmNew.StartPosition = FormStartPosition.CenterScreen
frmNew.Name = b.Name
frmNew.Text = b.Text
Try
frmNew.Show()
Catch ex As Exception
MsgBox(ex.Message)
End Try
我的form2中有一个设计,所以这是我在frmnew声明中使用的形式 单击按钮后,它会显示我的新表单 但当我再次点击按钮时,它会在第一个按钮中生成相同的新表格。 我想先关闭表格 在生成新表格之前。
我在多用户LAN CHAT中使用此代码。
感谢您的帮助。
答案 0 :(得分:2)
要查找当前是否打开了同一表单的另一个实例,您可以搜索集合Application.OpenForms并检查它是否包含与Form2名称相同的表单。当然,你应该避免使用两个不相关的同名形式。
Dim k = Application.OpenForms.Cast(Of Form).Where(Function (x) x.Name = "yourFormName").SingleOrDefault()
if k IsNot Nothing Then
k.Close()
End If
Dim frmNew As Form2
frmNew = new Form2
Dim b As Button = DirectCast(sender, Button)
frmNew.StartPosition = FormStartPosition.CenterScreen
frmNew.Name = b.Name
frmNew.Text = b.Text
Try
frmNew.Show()
Catch ex As Exception
MsgBox(ex.Message)
End Try
这种方法避免了全局变量来跟踪前一个实例。
快速检查后,我认为搜索代码可以缩减为
Dim k = Application.OpenForms.Cast(Of Form2).SingleOrDefault()
这也将避免与名称相同的无关表格发生名称冲突
答案 1 :(得分:1)
您应该在班级内全局声明frmNew
。这样做的好处是您根本不必担心关闭其他表单。
因此,全局声明它(在任何方法之外):
Dim frmNew as Form2
在你的方法中:
If frmNew IsNot Nothing Then
frmNew.Close()
frmNew = New Form2
Dim b As Button = DirectCast(sender, Button)
frmNew.StartPosition = FormStartPosition.CenterScreen
frmNew.Name = b.Name
frmNew.Text = b.Text
Try
frmNew.Show()
Catch ex As Exception
MsgBox(ex.Message)
End Try
现在每次调用该方法时,都会(重新)初始化相同的frmNew
,即您始终只使用单个Form2。
答案 2 :(得分:1)
我认为这会起作用
全局声明变量,在类
中Dim frmNew as New Form2
在你的方法中:
If frmNew.ShowInTaskbar = True Then
frmNew.Close()
End If
frmNew = New Form2
Dim b As Button = DirectCast(sender, Button)
frmNew.StartPosition = FormStartPosition.CenterScreen
frmNew.Name = b.Name
frmNew.Text = b.Text
Try
frmNew.Show()
Catch ex As Exception
MsgBox(ex.Message)
End Try