Вместо 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 и одна из причин, по которой он редко используется ...