Числовая проверка - PullRequest
       4

Числовая проверка

0 голосов
/ 23 февраля 2019

Итак, у меня есть программа, которая отслеживает счет после каждого иннинга в бейсболе и суммирует счет за каждый последующий иннинг в ListBox.
Единственная часть, с которой у меня возникают проблемы, - это проверка пользователя, чтобы убедиться, чточто ввод является числовым и не может передавать нечисловые значения.
Какой самый простой способ сделать это?Требуется ListBox и поле ввода.

Код ниже:

Public Class Form1
    Private Sub Label1_Click(sender As Object, e As EventArgs)
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim intRunningTotal As Integer = 0
        ListBox1.Items.Clear()

        For inning = 1 To 7 Step 1
            Dim strScore As String = InputBox("Enter the score of inning " + inning.ToString(), "Score")
            Dim intScore As Integer = strScore
            intRunningTotal = intRunningTotal + intScore
            ListBox1.Items.Add(inning.ToString() + vbTab + intScore.ToString() + vbTab + intRunningTotal.ToString())
        Next
    End Sub
End Class

Ответы [ 2 ]

0 голосов
/ 24 февраля 2019

Integer.TryParse (string, integerVariable) проверит строку, чтобы увидеть, может ли она быть преобразована в целое число.Он вернет True или False, чтобы его можно было использовать в состоянии State.Кроме того, он заполняет целочисленную переменную целочисленным представлением строки.

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    Dim intRunningTotal As Integer = 0
    ListBox2.Items.Clear()
    Dim inning As Integer = 1
    'changed to a do loop so I could increment inning in the If statement
    'It will only increment if the parse is succesful
    Do
        Dim strScore As String = InputBox("Enter the score of inning " + inning.ToString(), "Score")
        Dim intScore As Integer
        If Integer.TryParse(strScore, intScore) Then
            'This is a shortcut way to write intRunningTotal = intRunningTotal + intScore
            intRunningTotal += intScore
            ListBox2.Items.Add(inning.ToString() + vbTab + intScore.ToString() + vbTab + intRunningTotal.ToString())
            inning += 1
        Else
            MessageBox.Show("Please enter a number")
        End If
    Loop While inning < 8
End Sub
0 голосов
/ 23 февраля 2019

Вместо For Loop и InputBox добавьте TextBox в вашу форму и используйте его в качестве механизма ввода.Как и в примере с Себастьяном, используйте Integer.TryParse () , чтобы анализировать TextBox в целое число при каждом нажатии кнопки (только одно число за нажатие кнопки).Если у вас есть семь элементов в ListBox, вы можете отключить Button и TextBox, чтобы больше нельзя было вводить данные (или вы можете нажать кнопку, чтобы сообщить пользователю, что у него уже есть семь входов):

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Static intRunningTotal As Integer = 0
    Dim intScore As Integer
    If Integer.TryParse(TextBox1.Text, intScore) Then
        If intScore >= 0 Then
            intRunningTotal = intRunningTotal + intScore
            Dim entry As String = (ListBox1.Items.Count + 1).ToString() + vbTab + intScore.ToString() + vbTab + intRunningTotal.ToString()
            ListBox1.Items.Add(entry)
            If ListBox1.Items.Count = 7 Then
                Button1.Enabled = False
                TextBox1.Enabled = False
            End If
        Else
            MessageBox.Show("Score must be greater than or equal to zero.")
            TextBox1.Focus()
            TextBox1.SelectAll()
        End If
    Else
        MessageBox.Show("Invalid Score.  Please try again.")
        TextBox1.Focus()
        TextBox1.SelectAll()
    End If
End Sub

Извините, но я забыл упомянуть в исходном сообщении, что я ограничен использованием InputBox (всплывающее диалоговое окно) и не могу использовать текстовое поле (встроенное в пользовательский интерфейс).Кнопка должна вызвать всплывающее окно ввода.Оценка должна быть в списке.Все остальное разрешено

Вот еще одна версия:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    ListBox1.Items.Clear()
    Dim valid As Boolean
    Dim intRunningTotal As Integer = 0
    For inning As Integer = 1 To 7
        Do
            valid = False
            Dim strResponse As String = InputBox("Enter the score of inning " + inning.ToString() & ": ", "Score")
            Dim intScore As Integer
            If Integer.TryParse(strResponse, intScore) Then
                If intScore >= 0 Then
                    valid = True
                    intRunningTotal = intRunningTotal + intScore
                    ListBox1.Items.Add(inning.ToString() + vbTab + intScore.ToString() + vbTab + intRunningTotal.ToString())
                Else
                    MessageBox.Show("Score must be greater than or equal to zero.")
                End If
            Else
                MessageBox.Show("Invalid Score.  Please try again.")
            End If
        Loop While Not valid
    Next
End Sub

Та же проблема возникает из кода других пользователей в предоставленном коде, где вы не можете выйтииз поля ввода в команде, если отменить или нажать x, он будет отображаться как недопустимый счет вместо разрыва.

Вы не указали это как требование. Нет разницы между пустым вводом и нажатием «ОК», по сравнению с нажатием «X» или «Отмена». Вы можете проверить наличие пустой строки и выпасть так:

Dim strResponse As String = InputBox("Enter the score of inning " + inning.ToString() & ": ", "Score")
If strResponse = "" Then
    Exit For ' ...or Exit Sub
End If

Это хорошо известное ограничение InputBox и одна из причин, по которой он редко используется ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...