[英]How to handle on close event of a programmatically created Form in VB.NET?
[英]how to close a form (created by code)
我正在通過代碼創建表格。
我正在使用此代碼
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中有一個設計,因此這是im在單擊按鈕后在frmnew聲明中使用的表單,它顯示了我的新表單,但是當我再次單擊該按鈕時,它將在第一個表單中生成一個新表單。 我想在生成新表格之前先關閉表格。
我在我的多用戶LAN CHAT中使用此代碼。
謝謝您的幫助。
要查找當前是否打開了具有相同表單的另一個實例,可以搜索集合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()
這樣也可以避免名稱不相關的表單之間發生名稱沖突
您應該在類內部全局聲明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。
我認為這會起作用
全局聲明變量,內部類
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.