如何关闭表单(由代码创建)

时间:2014-02-24 10:25:34

标签: vb.net vb.net-2010

我正在按代码创建表单。

我正在使用此代码

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中使用此代码。

感谢您的帮助。

3 个答案:

答案 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