我是编程并尝试编写程序的新手,它从txt文件中读取有关房地产属性的数据,并且可以选择在txt文件中的其余属性下的新行上添加另一个属性
这是目前处理数组ReDim的子:
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,说“附加信息:对象引用未设置为对象的实例”并突出显示以下行:< / p>
arrListings(UBound(arrListings)).address = txtAddress.Text
我认为ReDim没有按预期工作,因为如果我将它更改为(UBound(arrListings) - 1)那么它将在最后一行的顶部重写新信息完全正常,但我无法将其写入一条新线。
非常感谢任何指导,
感谢。
编辑:
忘记添加我声明数组的部分。我觉得我这样做的方式相当狡猾,但这是我想到的第一种方式,似乎有效。
在modMain中就是这个;
Private listings() As Listing
此外,模块中还有此功能;
Public Function getListings() As Listing()
Return listings
End Function
在frmListings的顶部,我已经声明了第二个数组;
Private arrListings() As Listing
frmListings然后在frmListings_Load上调用此函数,就像这样;
arrListings = getListings()
然后在关闭表单的最后,调用第二个子类,用第二个数组中的更改数据替换原始数组中的数据。
喜欢这个;
setListings(arrListings)
Public Sub setListings(ByVal arrListings())
listings = arrListings
End Sub
它非常混乱,但我无法弄清楚如何在表单模块中使用数组,所以我就这样做了。
答案 0 :(得分:2)
当您调整数组大小时,默认情况下新元素为Nothing,因此您需要在使用之前将它们设置为某些内容:
ReDim Preserve arrListings(arrListings.Length)
arrListings(UBound(arrListings)) = New Listing
arrListings(UBound(arrListings)).address = txtAddress.Text
...
或
Private Sub ExitSetTexts()
Dim list = New Listing
list.address = txtAddress.Text
...
list.propertyId = propertyId
ReDim Preserve arrListings(arrListings.Length)
arrListings(UBound(arrListings)) = list
End Sub
更好的答案是使用Private arrListings As New List(Of Listing)
,但这需要对代码进行大量更改,因此更容易将其保留为数组。