vb.net - 无法在 VB.NET 中访问已释放的对象
问题描述
有一个小问题。
我收到一个Cannot access a disposed object
错误Form1
单击主窗体上的菜单项后 -Sub
调用以下内容,打开另一个窗体Form1
Private Sub ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripMenuItem.Click
If (Not Form1.Visible) Then
Form1.Show(Me)
End If
End Sub
在 内Form1
,有一个Try
块。如果没有通过,Form1
应该在关闭前显示一个消息框。消息出现,但那时我收到错误(它说Form1.Show(Me)
)
Private Sub Form1_Load(ByVal sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Try
'DO STUFF
Catch
MsgBox("Error loading in data. Please contact an administrator")
Me.Close()
Return
End Try
End Sub
我对这种类型的编程很陌生,即使在搜索了类似的问题之后也很难解决这个问题。有人可以帮助或指出我正确的方向吗?
编辑:所以看起来这是由于在活动期间试图关闭表单Load
。所以我现在的问题是,有没有简单的替代方案?我已经找到了这样做的方法C#
,但不是很多vb.net
解决方案
这是一种选择:
Private loadFailed As Boolean = False
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Try
'...
Catch ex As Exception
loadFailed = True
End Try
End Sub
Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles Me.Shown
If loadFailed Then
MessageBox.Show("Load failed")
Close()
End If
End Sub
在这种情况下,表单将显示上面的消息,然后在消息被关闭时关闭。这是一个不会显示表单的选项:
Friend Module Form1Manager
Public Sub ShowForm1(owner As Form)
If Not Form1.Visible Then
Try
'...
'Pass data to Form1 here.
Form1.Show(owner)
Catch ex As Exception
MessageBox.Show("Load failed")
End Try
End If
End Sub
End Module
并且,要使用它:
Private Sub ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripMenuItem.Click
Form1Manager.ShowForm1(Me)
End Sub