[英]vb.net - how to open the same form multiple times USING A SUB
您可能认为这与其他有关此问题的重复。 但这不是
我已经看到了几个与此有关的问题,但没有一个回答。
我会多次使用SUB打开一个表单。 我在其中传递Form
,它创建了该表单的新实例。 但是,如果我两次运行该Form
,就会遇到处理Form
问题
这是无效的子项:
Public Shared Sub OpenProgram(ByRef formToOpen As Form)
Dim newApp As Form
newApp = formToOpen
Try
newApp.Show()
newApp.BringToFront()
Catch ex As Exception
MsgBox("Unable to open program :(")
End Try
End Sub
我也尝试过将Dim newApp As New Form
Dim newApp As New formToOpen
但是这些都不起作用
我只有在尝试运行子程序,然后关闭窗体,然后再次运行子程序时才遇到问题。
我得到的错误是:
无法访问已处置的对象
对象名称:“商店”
shop
只是一种形式
提前致谢
选项一, 具有泛型 :
Public Function OpenProgram(Of F As {Form, New})(ByVal ThisOne As F) As F
Return New F()
End Function
选项二, 不带泛型 :
Public Function OpenProgram(ByVal ThisOne As Form) As Form
Return CType(Activator.CreateInstance(ThisOne.GetType()), Form)
End Function
用法:
Dim newApp As Form = OpenProgram(shop)
newApp.Show
给定一个具有2个按钮和以下代码的主窗体,以及两个其他窗体,可以重复单击这些按钮以打开多个窗体,而关闭它们不会影响打开更多窗体。
Public Class MasterForm
Private Sub btnOpenForm1_Click(sender As Object, e As EventArgs) Handles btnOpenForm1.Click
ShowForm(New Form1)
End Sub
Private Sub btnOpenForm2_Click(sender As Object, e As EventArgs) Handles btnOpenForm2.Click
ShowForm(New Form2)
End Sub
Private Sub ShowForm(WhichForm As Form)
With WhichForm
.Show()
.BringToFront()
End With
End Sub
End Class
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Try
Dim x As String = Application.ExecutablePath
Process.Start(x)
Catch ex As Exception
MsgBox("Executable path does not exist", MsgBoxStyle.Information, "New Window")
End Try
End Sub
您的“已关闭”表单在您处理之前不会关闭,只是不会显示。 您需要遍历表单并再次显示要查看的表单。 您可能会使用类似这样的内容-
Private Sub cmdOpenForm_Click(sender As Object, e As EventArgs) Handles cmdOpenForm.Click
Dim frmCollection = System.Windows.Forms.Application.OpenForms
If frmCollection.OfType(Of frmShop).Any Then
frmCollection.Item("frmShop").Activate()
Else
Dim frmShop As New frmShop
frmShop.Show()
End If
Me.Close()
Me.Dispose()
End Sub
close和dispose部分指向您当前所在的表单。由于表单是对象,因此您需要再次激活它们才能使用它们,或者您需要重新创建它们以显示该表单的新实例。
希望这就是您想要的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.