首页 > 解决方案 > 无法在 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

标签: vb.netvisual-studio

解决方案


这是一种选择:

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

推荐阅读