【发布时间】:2016-12-05 04:37:56
【问题描述】:
我有一个 VB 编程任务,让我习惯了 ArrayLists 和 Structures。我知道执行此操作的最佳方法是使用列表,但教授希望我使用具有结构的数组列表。我有一个表单应用程序,它要求用户输入客户详细信息(姓名、帐户编号、余额),并将其作为结构保存到数组列表中。该程序要求,如果用户对帐户进行了更改,然后按“下一个”或“上一个”按钮离开,arraylist 将使用所做的更改进行更新。这是我到目前为止在我的程序中得到的地方。当我单击 Next 或 Previous 时,程序崩溃,并且余额帐户从字符串“”转换为“Double”无效时收到以下错误。我不明白为什么它不接受文本框中的双精度或整数,在保存和添加潜艇时它工作正常。
Public Class AccountInformationForm
Dim objaccount As account
Dim accounts As New ArrayList
Dim count As Integer
Public Structure account
Public RecordNum As Integer
Public FirstName As String
Public LastName As String
Public balance As Double
Public account As Integer
End Structure
Private Sub AccountInformationForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
count = 0
objaccount.RecordNum = 0
objaccount.FirstName = "Jesus"
objaccount.LastName = "Christ"
objaccount.balance = 100
objaccount.account = 1
accounts.Add(objaccount)
'Display First Record
firstTextBox.Text = objaccount.FirstName
lastTextBox.Text = objaccount.LastName
balanceTextBox.Text = objaccount.balance
accountTextBox.Text = objaccount.account
End Sub
Private Sub nextButton_Click(sender As Object, e As EventArgs) Handles nextButton.Click
objaccount.FirstName = firstTextBox.Text
objaccount.LastName = lastTextBox.Text
objaccount.balance = balanceTextBox.Text
objaccount.account = accountTextBox.Text
accounts.Insert(count, objaccount)
count += 1
If count > (accounts.Count - 1) Then
count = 0
End If
'Display Current Record
firstTextBox.Text = accounts(count).FirstName
lastTextBox.Text = accounts(count).LastName
balanceTextBox.Text = accounts(count).balance
accountTextBox.Text = accounts(count).account
End Sub
Private Sub previousButton_Click(sender As Object, e As EventArgs) Handles previousButton.Click
'Before paging away, save the current form data in the current record
objaccount.FirstName = firstTextBox.Text
objaccount.LastName = lastTextBox.Text
objaccount.balance = balanceTextBox.Text
objaccount.account = accountTextBox.Text
accounts.Insert(count, objaccount)
count -= 1
If count < 0 Then
count = accounts.Count - 1
End If
firstTextBox.Text = accounts(count).FirstName
lastTextBox.Text = accounts(count).LastName
balanceTextBox.Text = accounts(count).balance
accountTextBox.Text = accounts(count).account
End Sub
Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click
Dim upper As Integer = accounts.Count
objaccount.RecordNum = (upper + 1)
If firstTextBox.Text = "" Then
MsgBox("Please enter a name")
Else
objaccount.FirstName = firstTextBox.Text
End If
If lastTextBox.Text = "" Then
MsgBox("Please enter a name")
Else
objaccount.LastName = lastTextBox.Text
End If
If balanceTextBox.Text = "" Then
MsgBox("Please enter a name")
Else
objaccount.balance = balanceTextBox.Text
End If
If accountTextBox.Text = "" Then
MsgBox("Please enter a name")
Else
objaccount.account = accountTextBox.Text
End If
accounts.Add(objaccount)
firstTextBox.Clear()
lastTextBox.Clear()
balanceTextBox.Clear()
accountTextBox.Clear()
End Sub
Private Sub Save_Click(sender As Object, e As EventArgs) Handles Save.Click
If firstTextBox.Text = "" Then
MsgBox("Please enter a name")
Else
objaccount.FirstName = firstTextBox.Text
End If
If lastTextBox.Text = "" Then
MsgBox("Please enter a name")
Else
objaccount.LastName = lastTextBox.Text
End If
If balanceTextBox.Text = "" Then
MsgBox("Please enter a name")
Else
objaccount.balance = balanceTextBox.Text
End If
If accountTextBox.Text = "" Then
MsgBox("Please enter a name")
Else
objaccount.account = accountTextBox.Text
End If
accounts.Add(objaccount)
End Sub
Private Sub btnNew_Click(sender As Object, e As EventArgs) Handles btnNew.Click
firstTextBox.Clear()
lastTextBox.Clear()
balanceTextBox.Clear()
accountTextBox.Clear()
Dim upper As Integer = accounts.Count
objaccount.RecordNum = (upper + 1)
accountTextBox.Text = objaccount.RecordNum
End Sub
Private Sub btnDelete_Click(sender As Object, e As EventArgs) Handles btnDelete.Click
accounts.RemoveAt(count)
count = count - 1
firstTextBox.Text = accounts(count).FirstName
lastTextBox.Text = accounts(count).LastName
balanceTextBox.Text = accounts(count).balance
accountTextBox.Text = accounts(count).account
End Sub
End Class
【问题讨论】:
-
只是转储你的代码并期望我们通过它来寻找错误的希望在这里我是不可接受的。 SO 是针对特定问题的。您可以准确地隔离出没有按预期工作的内容,并提供完整且清晰的解释,其中仅包括相关代码。您需要告诉我们您收到什么错误消息以及在哪里收到,或者解释您看到的行为以及它与您的预期有何不同。如果你不能这样做,那么在这里发布还为时过早。
-
我认为我的问题足够详细,可以指出问题在于按钮单击下一个和上一个的子按钮,只要我单击下一个或上一个,程序就会崩溃并且我得到“转换自余额帐户上的字符串“”键入“双”无效”。
-
不是。您说这是一项要求,但您没有说这不起作用,您当然没有说您收到了特定的错误消息。这不是我们应该猜测的东西。请编辑您的问题并删除所有不相关的代码并添加所有缺少的相关信息。其他想要帮助的人不必通过 cmets 找到他们需要的东西。
-
至于问题,错误信息告诉你所有你需要知道的。您正在尝试将
String转换为Double但String为空。现在由您来调试并确定发生这种情况的原因。 VS 是一个 IDE,而不是文本编辑器,所以不要仅仅将它用作文本编辑器。调试你的代码。使用断点。单步执行并在代码执行时检查您的数据。
标签: arrays vb.net arraylist structure