你调用的对象是空的。在vb,net中的类OOP

时间:2012-12-06 16:05:41

标签: vb.net

我在尝试编译此代码时出现此问题

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。错误是:对象引用未设置为对象的实例。


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

3 个答案:

答案 0 :(得分:1)

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

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

这是这条线吗?

_textbox(i).DataBindings.Add("text", ds.Tables(_mailboxname), temp(i))

答案 1 :(得分:1)

将表单加载函数更改为此,并从类顶部删除textboxobjdatagridobjtemp声明。

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

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

答案 2 :(得分:0)

您必须先创建阵列。

Dim textboxobj() As TextBox = New TextBox(){TextBox1, TextBox2}
Dim datagridobj() As DataGridView = New DataGridView(){DataGridView1}