我在尝试编译此代码时出现此问题
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。错误是:对象引用未设置为对象的实例。
我的代码有什么问题?有人可以修理吗?对此,我真的非常感激。 感谢。
答案 0 :(得分:1)
传递给db_class
构造函数的参数类型正确,但值不正确。它们导致db_class
的构造函数抛出此异常。
在不知道db_class
构造函数的哪一行抛出异常的情况下,我们无法帮助您。
这是这条线吗?
_textbox(i).DataBindings.Add("text", ds.Tables(_mailboxname), temp(i))
答案 1 :(得分:1)
将表单加载函数更改为此,并从类顶部删除textboxobj
,datagridobj
和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
基本上发生的事情是因为你的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}