1

所以我有这个代码的形式叫做MyMenuForm

Public Class MyMenuForm

    Public Sub LoadForm(sender As Object, e As EventArgs)
        DataGrid.DataSource = DataGridTable
        DataGridTable.Columns.Add("Name", GetType(String))
        DataGridTable.Columns.Add("Verison", GetType(String))
        DataGridTable.Columns.Add("Compile", GetType(Button))
        DataGridTable.Columns.Add("Location", GetType(String))
        DataGridTable.Columns.Add("CompileLoc", GetType(String))
    End Sub

    Public DataGridTable As DataTable

End Class

我希望能够DataGridTable从名为AddForm.

Public Class AddForm

    Public Sub Add_Click(sender As Object, e As EventArgs) Handles AddButton.Click
        MyMenuForm.DataGridTable.Rows.Add(NameBox(), VersionBox(), "Compile", LocationBox(), CompileBox())
    End Sub

End Class

当我单击AddButton按钮时,我收到错误

Additional information: Object reference not set to an instance of an object.

有谁知道为什么会发生这种情况或我该如何解决?我已经在我的能力范围内进行了谷歌搜索,但没有找到解决方案。请帮忙。

4

4 回答 4

0

尝试在您的项目中创建新模块,然后在其中声明您的数据表..

Public DataGridTable As DataTable

不要以类的形式声明 public ..

所以你可以在每个表单类中调用..

Public Class AddForm

    Public Sub Add_Click(sender As Object, e As EventArgs) Handles AddButton.Click
        DataGridTable.Rows.Add(NameBox(), VersionBox(), "Compile", LocationBox(), CompileBox())
    End Sub

End Class
于 2013-06-04T13:53:23.587 回答
0

LoadForm 是否正确执行?看来您还没有实例化一个新的 DataTable。所以 DataGridTable 始终是 Nothing。

于 2013-06-04T13:54:58.983 回答
0

试试我为这个例子创建的这个测试项目

这里有一点解释:

注意范围非常重要。 Object reference not set to an instance of an object是一个非常常见的错误,通常表明需要进行某种架构调整。

这是MyMenuForm类的设置。DataTable 被声明为该类的属性,因此任何可以访问该类的人都可以访问该特定属性。

Public Class MyMenuForm

    Public DataGridTable As New DataTable

    Private Sub LoadForm(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        With DataGridTable.Columns
            .Add("Name", GetType(String))
            .Add("Verison", GetType(String))
            .Add("Compile", GetType(Button))
            .Add("Location", GetType(String))
            .Add("CompileLoc", GetType(String))
        End With
        DataGridView1.DataSource = DataGridTable
    End Sub

End Class

在尝试使用类添加行之前,您还需要确保MyMenuForm已创建AddForm。就我而言,我只是将其添加为启动表单并在单击时打开了一个添加表单

启动自

AddForm中,确保引用类DataGridTable上的属性MyMenuForm,如下所示:

Private Sub AddButton_Click(sender As System.Object, e As System.EventArgs) Handles AddButton.Click
    Dim row As DataRow = MyMenuForm.DataGridTable.NewRow()

    With row
        .Item("Name") = "TestName"
        .Item("Verison") = "TestVerison"
        .Item("Compile") = New Button
        .Item("Location") = "TestLocation"
        .Item("CompileLoc") = "TestCompileLoc"
    End With

    MyMenuForm.DataGridTable.Rows.Add(row)

End Sub
于 2013-06-04T18:37:36.517 回答
0

据我所知,您还没有在任何地方实例化 DataGridTable,您只声明了它。你将需要一个

DataGridTable = New DataTable

在某些时候,可能在 LoadForm 子

于 2013-06-04T16:31:01.043 回答