有一个小问题。
我收到 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
答案 0 :(得分:0)
这是一种选择:
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