无法访问 VB.NET 中已处理的对象

时间:2020-12-30 13:00:40

标签: vb.net visual-studio

有一个小问题。

我收到 Cannot access a disposed objectForm1 错误

点击主窗体上的菜单项 - 调用下面的 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

来说并不多

1 个答案:

答案 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