vb.netlistboxvoting-system

Why is it only displaying one result


This program is supposed to accept in valid candidates for voting, add the names typed in a text box to a list box. In the list box the user may double click on the candidate they choose. After the tally button is clicked a list box displaying the candidates' Names and votes will appear along side the other list box.

My problem is that the lstTallies only displays the last voted candidate. Below is my code

Public Class Form1
    Dim maxVotes As Integer
    Dim winner As String
    Dim votes() As Integer
    Dim index As Integer
    Dim candidates As String

    Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click
        If Not isValidInput(txtNewCandidate.Text) Then
            Exit Sub
        End If
        lstCandidates.Items.Add(txtNewCandidate.Text)
        txtNewCandidate.Clear()
        txtNewCandidate.Focus()
        ReDim Preserve votes(index)
        index += 1
    End Sub

    Private Function isValidInput(ByRef firstName As String) As Boolean
        If IsNumeric(txtNewCandidate.Text) Or txtNewCandidate.Text = "" Then
            MsgBox("Please input a valid candidate name.")
            txtNewCandidate.Focus()
            Return False
        Else
            Return True
        End If
    End Function

    Private Sub btnTally_Click(sender As Object, e As EventArgs) Handles btnTally.Click
        lstTallies.Visible = True
        lblTally.Visible = True
        lstTallies.Items.Add(lstCandidates.Text & " " & votes(lstCandidates.SelectedIndex))
    End Sub

    Private Sub lstCandidates_DoubleClick(sender As Object, e As EventArgs) Handles lstCandidates.DoubleClick
        If lstCandidates.SelectedIndex = -1 Then
            MsgBox("Select a candidate by double-clicking")
        End If
        votes(lstCandidates.SelectedIndex) += 1
        MsgBox("Vote Tallied")
    End Sub
End Class

Solution

  • Try this:

    Assuming the index of the Candidate and his/her Vote are the same:

      Private Sub btnTally_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnTally.Click
        lstTallies.Visible = True
        lblTally.Visible = True
        For i = 0 To lstCandidates.Items.Count - 1
            lstTallies.Items.Add(lstCandidates.Items(i).ToString & " - " & votes(i))
        Next
      End Sub
    

    You cannot get the contents of the ListBox unless you iterate it.