这是Visual Basic的作业(使用Visual Studio 2013)。这是我在本网站(或任何网站)上的第一个问题。
我正在尝试制作一个利用列表的电话簿。该目录应该能够搜索,添加和删除联系人。
在我的表单上,我有一个列表框,其名称已经通过集合属性输入。我有一个标签输出相应的电话号码。我添加了10个姓名和10个电话号码。 (电话号码添加了一个列表 - 在设计时)
在运行时,用户应该可以单击“添加联系人”按钮将另一个联系人添加到列表中。我使用两个输入框;首先提示输入要添加的名称,然后提示输入电话号码。
我尝试添加的第一个联系人似乎正常运作。我的问题是当我尝试将第二个联系人添加到列表时,第一个添加的电话号码会更改以反映为第二个添加添加的相同号码。 (看起来第二个联系电话号码覆盖了我为第一个添加的内容)为了清楚,当程序运行时,我从列表框中的10个名称开始,10个数字只有在您单击时才能查看列表框中的名称。当我添加第一个时,它计数11然后添加第二个,计数变为12.电话号码被添加到列表(不是列表框)。
我没有收到任何错误消息,只是信息没有正确放入列表中(类似于数组的列表)。
这是我的代码:
如果我需要更清楚问题是什么,请告诉我。
仅供参考:我在提交问题之前再次对其进行了测试。我只是添加一个名字和一位数字来测试它。当我输入第一个添加的联系人时,我使用了数字5.添加了第二个联系人,我使用了数字6.当我检查时,第一个联系人显示6,第二个联系人显示6.然而,我测试了3增加联系人。第一个添加(5)的编号相同,第二个添加(6)的编号相同,第三个添加的联系使用7。当我检查结果时,首先添加的联系人更改为7,第二次联系人保持在6,第三次联系人显示7.我不知道发生了什么?
Option Explicit On
Option Strict On
'=========== Class mainForm =================
Public Class mainForm
Const MAX_SUBSCRIPT_Integer As Integer = 9
Dim inputNameString As String 'user contact name input
Dim inputPhoneString As String 'user phone number input
Private phoneList As New List(Of String)
'============== mainForm_Load ====================
Private Sub mainForm_Load(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles Me.Load
splashForm.ShowDialog()
phoneList.Add("555 - 266 - 9563")
phoneList.Add("555 - 266 - 5461")
phoneList.Add("555 - 266 - 7412")
phoneList.Add("555 - 266 - 5642")
phoneList.Add("555 - 266 - 6721")
phoneList.Add("555 - 266 - 1465")
phoneList.Add("555 - 266 - 3541")
phoneList.Add("555 - 266 - 2874")
phoneList.Add("555 - 266 - 9114")
phoneList.Add("555 - 266 - 2245")
End Sub
'======= namesListBox_SelectedIndexChanged() =====================
Private Sub namesListBox_SelectedIndexChanged(sender As Object, e As EventArgs) Handles namesListBox.SelectedIndexChanged
If namesListBox.SelectedIndex >= 0 Then
phoneNumberLabel.Text = (phoneList(CInt(namesListBox.SelectedIndex.ToString())))
Dim count As Integer
contactPictureBox.Image = contactImageList.Images(namesListBox.SelectedIndex)
count += 1
End If
End Sub
'============== addButton_Click =====================
Private Sub addButton_Click(sender As Object, e As EventArgs) Handles addButton.Click
inputNameString = (InputBox("Enter name of Contact. Ex. Doctor: Dr. Sigmund Freud ", "Add Contact"))
inputPhoneString = (InputBox("Enter contact phone number. Ex. 555-555-1212", "Add Contact Phone Number"))
namesListBox.Items.Add(inputNameString.ToString())
phoneList.Add(inputPhoneString.ToString())
AddElementToPhoneString(inputPhoneString)
End Sub
'============== AddElementToPhoneString() ========================
Public Sub AddElementToPhoneString(ByVal stringToAdd As String)
phoneList(MAX_SUBSCRIPT_Integer + 1) = stringToAdd
Dim countInteger As Integer
countInteger = phoneList.Count()
countLabel.Text = CStr(CInt(phoneList.Count))
End Sub
End Class
答案 0 :(得分:1)
看起来可能会有一些问题,但现在这就是让你绊倒的问题:
phoneList(MAX_SUBSCRIPT_Integer + 1) = stringToAdd
您已将MAX_SUBSCRIPT_Integer设置为常量,因此无论您添加了多少项,都始终将项目10添加到列表中。你应该做的事情如下:
phoneList.add(stringToAdd)
这将确保您始终在列表中添加新项目,而不是覆盖最后一项。
答案 1 :(得分:0)
这是添加联系人问题的解决方法:我完全删除了AddElementToPhoneString。我认为它正在做一些有成效的事情,但实际上却引发了这个问题。
选项明确开启 Option Strict On
'===========类mainForm ================= 公共类mainForm
Const MAX_SUBSCRIPT_Integer As Integer = 9
Dim inputNameString As String 'user contact name input
Dim inputPhoneString As String
Private phoneList As New List(Of String) 'user phone number input
'============== mainForm_Load ====================
Private Sub mainForm_Load(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles Me.Load
splashForm.ShowDialog()
phoneList.Add("555 - 266 - 9563")
phoneList.Add("555 - 266 - 5461")
phoneList.Add("555 - 266 - 7412")
phoneList.Add("555 - 266 - 5642")
phoneList.Add("555 - 266 - 6721")
phoneList.Add("555 - 266 - 1465")
phoneList.Add("555 - 266 - 3541")
phoneList.Add("555 - 266 - 2874")
phoneList.Add("555 - 266 - 9114")
phoneList.Add("555 - 266 - 2245")
End Sub
'======= namesListBox_SelectedIndexChanged() ====================
Private Sub namesListBox_SelectedIndexChanged(sender As Object, e As EventArgs) Handles namesListBox.SelectedIndexChanged
If namesListBox.SelectedIndex >= 0 Then
phoneNumberLabel.Text = (phoneList(CInt(namesListBox.SelectedIndex.ToString())))
Dim count As Integer
contactPictureBox.Image = contactImageList.Images(namesListBox.SelectedIndex)
count += 1
End If
End Sub
'============== addButton_Click =====================
Private Sub addButton_Click(sender As Object, e As EventArgs) Handles addButton.Click
inputNameString = (InputBox("Enter name of Contact. Ex. Doctor: Dr. Sigmund Freud ", "Add Contact"))
inputPhoneString = (InputBox("Enter contact phone number. Ex. 555-555-1212", "Add Contact Phone Number"))
namesListBox.Items.Add(inputNameString.ToString())
phoneList.Add(inputPhoneString.ToString())
End Sub
结束班