在VB

时间:2016-05-09 00:12:38

标签: vb.net visual-studio list

这是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

2 个答案:

答案 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

结束班