2013-09-21 3 views
-1

Я получаю сообщение об ошибке во время выполнения, когда я вхожу алфавиты в InputBoxПолучения ошибки из IsNumeric() VB.NET

Dim amount As String 
     amount = InputBox("Enter the amount of people you want to participtate", "System Message") 
     If amount < 0 Or Not (IsNumeric(amount)) Then 
      MsgBox("Please enter positive number of people", vbExclamation, "System Message") 
     End If 
+0

'В случае ошибки <0' произошла ошибка .. – matzone

+0

Пожалуйста, поставьте опцию Strict On в верхней части вашего файла кода или включите ее в свойствах проекта. –

ответ

2

Сравнения строк в числа довольно опасно и дул в лице. Вы можете заставить его работать, но вам нужно будет правильно закодировать код, гарантируя, что вы никогда не попытаетесь сравнить строку, которая не может быть преобразована в число. Это требует использование другого оператора:

If Not IsNumeric(amount) OrElse amount < 0 Then 
     MsgBox("Please enter positive number of people", vbExclamation, "System Message") 
    End If 

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

Для этого нужно использовать метод Integer.TryParse() для преобразования строк в числа.

1

Чтобы избежать ошибки, вы можете сделать это так ..

If IsNumeric(amount) Then 
    If value(amount) > 0 Then 
    'codes here 
    Else  
    MsgBox("Please enter positive number of people", vbExclamation, "System Message") 
    End If 
Else 
    MsgBox("Please enter a number of people", vbExclamation, "System Message") 
End If 
0

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

Class MainWindow 
Private Sub Button_Click(sender As Object, e As RoutedEventArgs) 
    tb2.Text = tbCheck(tb1) 
End Sub 

Private Function tbCheck(ByRef tb As TextBox) As Boolean 
    tbCheck = tb.Text.Length > 0 
    Try 
     tbCheck = (tb.Text/1) > 0 
    Catch ex As Exception 
     tbCheck = False 
    End Try 
    Return tbCheck 
End Function 

End Class

Это только простая программа, которую я написал, чтобы проверить, если код работал, как я надеялся. Надеюсь, это может помочь кому-то или хотя бы сказать мне, есть ли что-то, чего я не вижу.

Смежные вопросы