Не знаете, как выполнить последовательную проверку с отображением всех ответов проверки

Я пытаюсь получить одинаковую проверку (существование, числовое значение, проверку диапазона), выполненную для 4 разных введенных пользователем оценок, и отобразить результаты всех тестов на одной метке в разных строках. Кто-нибудь может помочь, пожалуйста?

Это текущий код, но проверяется только 1 балл, и я не знаю, как его изменить, так как я новичок в vb.net.

Private Sub ValidateData()
        'Declares the class level variables for this procedure
        lblStatusDisplay.Text = ""
        S1 = Val(txtScore1.Text)
        S2 = Val(txtScore2.Text)
        S3 = Val(txtScore3.Text)
        S4 = Val(txtScore4.Text)
        Total = S1 + S2 + S3 + S4


        lblStatusDisplay.Text = ""
        S = Val(txtScore1.Text)
        If S = "" Then
            lblStatusDisplay.Text = vbCrLf & "No data has been entered for Score 1"

        ElseIf Not IsNumeric(txtScore1.Text) Then
            lblStatusDisplay.Text = vbCrLf & "Please enter a numerical value for Score 1"

        ElseIf Val(S) < 0 Or Val(S) > 10 Then
            lblStatusDisplay.Text = vbCrLf & "Please enter a number between 0 and 10 for Score 1"

        Else
            lblStatusDisplay.Text = vbCrLf & "Score 1 is valid"
            S = Val(txtScore2.Text)
            If S = "" Then
                lblStatusDisplay.Text = vbCrLf & "No data has been entered for Score 1"

            ElseIf Not IsNumeric(txtScore1.Text) Then
                lblStatusDisplay.Text = vbCrLf & "Please enter a numerical value for Score 1"

            ElseIf Val(S) < 0 Or Val(S) > 10 Then
                lblStatusDisplay.Text = vbCrLf & "Please enter a number between 0 and 10 for Score 1"

            Else
                lblStatusDisplay.Text = vbCrLf & "Score 1 is valid"
                S = Val(txtScore2.Text)
            End If
        End If

    End Sub

person user3448775    schedule 22.03.2014    source источник


Ответы (1)


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

Private Sub ValidateData()
    lblStatusDisplay.Text = ""
    Total = 0
    'This iterates through all the textboxes whose names start with "txtScore"
    For Each tb In Me.Controls.OfType(Of TextBox).Where(Function(x) x.Name.StartsWith("txtScore"))
        Dim tempnum = 0
        If tb.Text = "" Then
            lblStatusDisplay.Text += vbCrLf & "No data has been entered for Score " & tb.Name.Last
        'Using tryparse here checks if the text is a number and initializes the 
        'temp variable for the next elseif
        ElseIf Not Integer.TryParse(tb.Text, tempnum) Then
            lblStatusDisplay.Text += vbCrLf & "Please enter a numerical value for Score " & tb.Name.Last

        ElseIf tempnum < 0 Or tempnum > 10 Then
            lblStatusDisplay.Text += vbCrLf & "Please enter a number between 0 and 10 for Score " & tb.Name.Last

        Else
            lblStatusDisplay.Text += vbCrLf & "Score " & tb.Name.Last & " is valid"
            Total += tempnum
        End If
    Next
    lblSatusDisplay.Text = lblStatusDisplay.Text.Trim(vbCrLf.ToCharArray)
End Sub

Это предполагает, что все ваши оценки являются целыми числами, если вы не используете Double.TryParse.

person tinstaafl    schedule 22.03.2014