带有循环的Visual Basic列表框,用于确定总分和平均值

时间:2014-10-23 17:43:29

标签: vb.net loops listbox

我是VB的新手,我需要为溜冰场创建一个程序。评委的数量每周都不同,每个评委在每名裁判员的比赛结束时,每名裁判都给予选手 0-10 。该应用程序需要允许溜冰场的管理员输入特定滑冰者的每个评分。它还应计算并显示skater's averagethe number of scores enteredtotal score。您从List box中选择每个分数,然后点击Record Score button

我不知道下一步该往哪里去。当您从list box中选择第一个分数并且还将分数重新添加到list box的底部时,一切都不正确。以下是代码,感谢任何帮助。

谢谢!

Option Explicit On
Option Strict On
Option Infer Off

Public Class frmMain

    Private Sub btnExit_Click(sender As Object, e As EventArgs) Handles btnExit.Click
       Me.Close()
    End Sub

    Private Sub frmMain_Load(sender As Object, e As EventArgs) Handles Me.Load
        'Fill list box with values

        For intScore As Integer = 0 To 10 Step 1
            lstScore.Items.Add(intScore.ToString)
        Next intScore
        lstScore.SelectedItem = "0"

    End Sub

    Private Sub btnRecordScore_Click(sender As Object, e As EventArgs) Handles btnRecordScore.Click
        'accumulates the scores for each skater
        Dim intScore As Integer
        Dim intNumScores As Integer
        Dim intTotalScore As Integer
        Dim decAvgScore As Decimal

        Integer.TryParse(lstScore.SelectedItem.ToString, intScore)

        'add score to score 
        lstScore.Items.Add(lstScore.SelectedItem)

        'update average
        intNumScores = 0
        intTotalScore = 0
        For Each selScore As Object In lstScore.Items
            If Integer.TryParse(selScore.ToString, intScore) Then
                intNumScores = intNumScores + intScore
                intTotalScore = intTotalScore + 1
            End If
        Next
        decAvgScore = intNumScores \ intTotalScore
        lblTotalScore.Text = intNumScores.ToString
        lblNumScores.Text = intTotalScore.ToString
        lblAvgScore.Text = decAvgScore.ToString("N1")
    End Sub

    Private Sub btnNextSkater_Click(sender As Object, e As EventArgs) Handles btnNextSkater.Click
        'clears screen, sets focus
        lblTotalScore.Text = String.Empty
        lblNumScores.Text = String.Empty
        lblAvgScore.Text = String.Empty
        lstScore.Focus()
    End Sub
End Class

1 个答案:

答案 0 :(得分:0)

试试这个。

Public Class Form1
    'Declare TotalScore and NumScore here so they're values stay constant
    Dim intTotalScore As Integer = 0
    Dim intNumScores As Integer = 0

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'Populate list box with scores
        For intScore As Integer = 0 To 10 Step 1
            lstScore.Items.Add(intScore.ToString)
        Next intScore
        lstScore.SelectedItem = "0"
    End Sub

    Private Sub btnRecordScore_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRecordScore.Click
        Dim intScore As Integer
        Dim AvgScore As Decimal

        'add score to score 
        intScore = lstScore.SelectedIndex
        intTotalScore = intTotalScore + lstScore.SelectedIndex

        'update average
        intNumScores = intNumScores + 1
        AvgScore = intTotalScore / intNumScores

        'Populate labels
        lblTotalScore.Text = intTotalScore.ToString
        lblNumScores.Text = intNumScores.ToString
        lblAvgScore.Text = AvgScore.ToString
    End Sub

    Private Sub btnNextSkater_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNextSkater.Click
        'clears screen, sets focus
        intTotalScore = 0
        intNumScores = 0

        lblTotalScore.Text = String.Empty
        lblNumScores.Text = String.Empty
        lblAvgScore.Text = String.Empty
        lstScore.SelectedItem = "0"
        lstScore.Focus()
    End Sub
End Class

请记住,lstScore.Items.Add(lstScore.SelectedItem)只会在列表框中添加其他项目。

希望这有帮助。