2016-09-15 3 views
0

Эта программа должна принимать действительные кандидаты для голосования, добавлять имена, введенные в текстовое поле, в список. В поле списка пользователь может дважды щелкнуть по выбранному кандидату. После нажатия кнопки подсчета появится окно со списком имен кандидатов и голосов, которые будут отображаться рядом с другим списком.Почему он отображает только один результат?

Моя проблема в том, что lstTallies отображает только последнего проголосовавшего кандидата. Ниже мой код

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 
+0

Проблема в том, что вы не 'итерируете' через' lstCandidates'. Также просто совет, используя индекс, не является надежным в том, что вы делаете, у вас должен быть какой-то идентификатор типа _CandidateID_ для ваших кандидатов. –

+0

Я пробовал итерацию с горсткой lstCandidates, и он вернул последнего нажатого кандидата, повторенного до количества голосов. –

+0

Индекс кандидата и его/ее голос одинаковы? –

ответ

0

Попробуйте это:

Предполагая, что индекс кандидата и его/ее Голосуйте одинаковы:

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 

Вы не можете получить содержимое из ListBox, если вы не iterate.

+0

Хорошо, что работает! Благодаря! Теперь мне нужно отобразить имена победителей (s ') в окне изображения. Я не знаю, с чего начать. –

+0

Это совсем другая история. Пожалуйста, напишите еще один вопрос, включая информацию о том, как вы хотите, чтобы результаты были представлены, и я постараюсь ответить на него, если смогу. –

+0

Я разместил его –