-1

我在尝试编译这段代码时遇到了这个问题

Public Class Form2
Dim db_classobj As Object
Dim textboxobj() As TextBox = {TextBox1, TextBox2}
Dim datagridobj() As DataGridView = {DataGridView1}

Dim temp As New db_class(textboxobj, datagridobj, "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=datamhs.accdb", "mhs", "ksmhs")


Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
   db_classobj = temp
End Sub


End Class

编译时,我收到此错误消息:
创建表单时出错。有关详细信息,请参阅 Exception.InnerException。错误是:对象引用未设置为对象的实例。


我的代码有什么问题?有人可以解决吗?对此,我真的非常感激。谢谢。

4

3 回答 3

1

您传递给构造函数的参数是db_class正确的类型,但不是正确的值。它们导致构造函数db_class抛出此异常。

在不知道构造函数的哪一行db_class引发异常的情况下,我们无法帮助您。

是这条线吗?

_textbox(i).DataBindings.Add("text", ds.Tables(_mailboxname), temp(i))
于 2012-12-06T16:23:59.510 回答
1

将您的表单加载函数更改为此,并从类的顶部删除textboxobjdatagridobj和声明。temp

Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

     Dim textboxobj() As TextBox = {TextBox1, TextBox2}
     Dim datagridobj() As DataGridView = {DataGridView1}
     Dim temp As New db_class(textboxobj, datagridobj, "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=datamhs.accdb", "mhs", "ksmhs")
     db_classobj = temp
End Sub

基本上发生的事情是因为你的语句在类中是正确的,它在表单构造函数之前执行,并且构造函数是你的所有控件(如 TextBox1)被分配它们的值的地方,所以基本上你传递了一个值Dim temp as New数组Nothing给你的db_class构造函数。当您点击此行时,_textbox(i).DataBindings.Add("text", ds.Tables(_mailboxname), temp(i))_textbox(i)部分将返回Nothing,因此对该属性的尝试引用DataBindings失败,因为它不存在。

于 2012-12-06T19:01:09.327 回答
0

您必须先创建数组。

Dim textboxobj() As TextBox = New TextBox(){TextBox1, TextBox2}
Dim datagridobj() As DataGridView = New DataGridView(){DataGridView1}
于 2012-12-06T16:09:15.100 回答