VB Выбрать регистр, если строка текстового поля, числовое текстовое поле elif (isnumeric не работает)
Я использую программу, которая должна обрабатывать ввод пользователя по-разному, в зависимости от числа или строки. Select Case и IsNumeric не работают должным образом.
Я получаю этот код, когда animal= char или string.
Ошибка:
Произошло необработанное исключение типа "System.InvalidCastException" в Microsoft.VisualBasic.dll
Дополнительная информация: Преобразование из строки "D" в тип "Long" недопустимо.
Код, который беспокоит:
Case "D" Or "d"
Весь код:
Option Explicit Off
Option Strict Off
Public Class MainForm
Public Sub ifButton_Click(sender As Object, e As EventArgs) Handles ifButton.Click
animal = codeTextBox.Text
Select Case IsNumeric(codeTextBox.Text)
Case True
Dim decanimal As Decimal
decanimal = CDec(animal)
Select Case decanimal
Case "1"
msgLabel.Text = "Dog"
Case "2"
msgLabel.Text = "Cat"
Case Else
msgLabel.Text = "Bird"
End Select
Case False
Dim stranimal As String
stranimal = CStr(animal)
Select Case stranimal
Case "D" Or "d"
msgLabel.Text = "Dog"
Case "C" Or "c"
msgLabel.Text = "Cat"
Case Else
End Select
End Select
End Sub
End Class
3 ответа
Вы должны взглянуть на документацию для Select Case, которую вы не поставили, или вы поставили запятую.
Case "D", "d"
Или поместите сравниваемую строку в нижний регистр.
Select Case stranimal.ToLower()
Case "d"
msgLabel.Text = "Dog"
Case "c"
msgLabel.Text = "Cat"
Case Else
End Select
decanimal - это десятичное число, не используйте строку в выражении case. Кроме того, включите эту опцию строго;)
Вы можете использовать возвращаемое значение Double.TryParse()
чтобы увидеть, если данные являются числовыми. Вот исправленный код:-
Public Sub ifButton_Click(sender As Object, e As EventArgs) Handles ifButton.Click
Dim animal As String = codeTextBox.Text
Select Case Double.TryParse(animal, Nothing) 'See if it is convertible to Double (numeric) or not.
Case True
Select Case Double.Parse(animal)
Case 1
msgLabel.Text = "Dog"
Case 2
msgLabel.Text = "Cat"
Case Else
msgLabel.Text = "Bird"
End Select
Case False
Select Case animal.ToLower() 'To compare the strings without case-sensitivity
Case "d"
msgLabel.Text = "Dog"
Case "c"
msgLabel.Text = "Cat"
Case Else
'You didn't mention anything but I guess it should be msgLabel.Text = "Bird"
End Select
End Select
End Sub
Альтернативный подход к кодированию...
Dim cAnimals As New Collection
cAnimals.Add("Dog", "d")
cAnimals.Add("Dog", "1")
cAnimals.Add("Cat", "c")
cAnimals.Add("Cat", "2")
Dim s As String = ""
Do While True
s = InputBox("code:").ToLower
If s = "" Then Exit Do
If cAnimals.Contains(s) Then
MsgBox(cAnimals(s))
Else
MsgBox("Invalid code")
End If
Loop
Используйте некоторую структуру данных для хранения кодов для преобразования, здесь VB Collection, затем проверьте, есть ли код в данных или нет.
VB действительно не волнует, являются ли данные числовыми или нет. Это может кусать время от времени, но полезно в другое время. Option Strict победит, в большинстве случаев не нужно IMO. Зависит от важности приложения и локальной политики.