您可能认为这与此相关的其他问题重复。但它不是
我已经看到了几个不同的问题,但没有人回答这个问题。
我想多次使用SUB打开一个表单。我传入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
,但这些都不起作用
如果我尝试运行sub,然后关闭表单,然后再次运行sub,我只会遇到问题。
我得到的错误是:
无法访问已处置的对象
对象名称:'shop'
shop
只是表格
提前致谢
答案 0 :(得分:1)
选项一,with generics:
Public Function OpenProgram(Of F As {Form, New})(ByVal ThisOne As F) As F
Return New F()
End Function
选项二,without generics:
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
答案 1 :(得分:0)
如果主窗体有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
答案 2 :(得分:0)
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
答案 3 :(得分:-1)
您的“关闭”表单在您处理之前不会关闭,它只是没有显示。您需要遍历表单并显示要再次查看的表单。你可能会使用这样的东西 -
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部分指向您当前所在的表单。由于表单是对象,您需要再次激活它们才能使用它们,或者您需要再次重新创建它们以显示该表单的新实例。 / p>
希望这就是你要找的东西。