Vb.net Visual Basic-ReDim Preserve-对象引用未设置为对象的实例
我对编程非常陌生,并尝试编写一个程序,它从txt文件中读取有关房地产的数据,并可以选择在txt文件的其余属性下的新行中添加另一个属性 这是目前正在处理阵列的ReDim的子组件:Vb.net Visual Basic-ReDim Preserve-对象引用未设置为对象的实例,vb.net,Vb.net,我对编程非常陌生,并尝试编写一个程序,它从txt文件中读取有关房地产的数据,并可以选择在txt文件的其余属性下的新行中添加另一个属性 这是目前正在处理阵列的ReDim的子组件: Private Sub ExitSetTexts() Dim propertyId As String = arrListings(UBound(arrListings)).propertyId ReDim Preserve arrListings(UBound(arrListings) + 1)
Private Sub ExitSetTexts()
Dim propertyId As String = arrListings(UBound(arrListings)).propertyId
ReDim Preserve arrListings(UBound(arrListings) + 1)
arrListings(UBound(arrListings)).address = txtAddress.Text
arrListings(UBound(arrListings)).city = txtCity.Text
arrListings(UBound(arrListings)).state = txtState.Text
arrListings(UBound(arrListings)).postcode = txtPostcode.Text
If rbHouse.Checked = True Then
arrListings(UBound(arrListings)).type = "H"
ElseIf rbUnit.Checked = True Then
arrListings(UBound(arrListings)).type = "U"
ElseIf rbAcreage.Checked = True Then
arrListings(UBound(arrListings)).type = "A"
End If
arrListings(UBound(arrListings)).bedrooms = txtBedrooms.Text
arrListings(UBound(arrListings)).salePrice = txtSalePrice.Text
propertyId = CInt(propertyId.Trim.Remove(0, 1))
propertyId = CInt(propertyId) + 1
propertyId = CInt(propertyId).ToString("D4")
propertyId = " P" + propertyId
arrListings(UBound(arrListings)).propertyId = propertyId
End Sub
当我运行程序时,输入所有详细信息,然后单击运行此代码的按钮,它会抛出一个NullReferenceException,上面写着“附加信息:对象引用未设置为对象的实例”,并突出显示这一行:
arrListings(UBound(arrListings)).address = txtAddress.Text
我假设ReDim没有按预期工作,因为如果我将其更改为(UBound(arrListings)-1),那么它将在最后一行的顶部完全重写新信息,但我无法让它在新行上写入
任何指导都将不胜感激
谢谢
编辑:
忘记添加我声明数组的部分。我觉得我这样做是相当狡猾的,但这是我想到的第一个方法,而且似乎奏效了
主要是这样,
Private listings() As Listing
模块中的进一步功能是该功能
Public Function getListings() As Listing()
Return listings
End Function
在frmListings的顶部,我声明了第二个数组
Private arrListings() As Listing
frmListings然后在frmListings_加载时调用此函数,如下所示
arrListings = getListings()
然后,在结束时,当您关闭表单时,将调用第二个子数组,该子数组使用第二个数组中更改的数据替换原始数组中的数据
像这样,
setListings(arrListings)
Public Sub setListings(ByVal arrListings())
listings = arrListings
End Sub
它非常混乱,但我无法从表单中了解如何使用模块中的数组,所以我就是这样做的。当调整数组大小时,新元素默认为零,因此在使用它们之前需要将它们设置为:
ReDim Preserve arrListings(arrListings.Length)
arrListings(UBound(arrListings)) = New Listing
arrListings(UBound(arrListings)).address = txtAddress.Text
...
或
更好的答案是使用
私有arrListings作为新列表(列表)
,但这需要对代码进行大量更改,以便将其保留为数组。调整数组大小时,新元素默认为零,因此在使用它们之前需要将它们设置为:
ReDim Preserve arrListings(arrListings.Length)
arrListings(UBound(arrListings)) = New Listing
arrListings(UBound(arrListings)).address = txtAddress.Text
...
或
更好的答案是使用
私有arrListings作为新列表(列表)
,但这需要对代码进行大量更改,以便将其保留为数组。是否声明了arrListings?如果是这样的话,你能给我们看一下那部分代码吗?你声明了吗?如果是这样的话,你能给我们看一下那部分代码吗。Slai回答正确。不确定为什么,但使用Len不起作用,所以我将其保留为UBound,工作完美,非常感谢。Slai回答正确。不确定为什么,但使用Len不起作用,所以我将其保留为UBound,工作完美,非常感谢。