0

数値または文字列に応じて、ユーザー入力を異なる方法で処理する必要があるプログラムを使用しています。Select Case と IsNumeric が期待どおりに機能しません。

animal=a 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
4

3 に答える 3

3

入れないSelect Caseのドキュメントを参照する必要があります。または、カンマを入れます。

Case "D", "d"

または、比較対象の文字列を小文字にします。

Select Case stranimal.ToLower()
    Case "d"
        msgLabel.Text = "Dog"
    Case "c"
        msgLabel.Text = "Cat"
    Case Else
End Select

10 進数は 10 進数です。case ステートメントで文字列を使用しないでください。また、そのオプションを厳密にオンにしてください;)

于 2015-10-15T12:19:28.600 に答える
1

の戻り値を使用して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
于 2015-10-15T13:57:37.487 に答える
0

別のコーディング方法...

    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 コレクションです。次に、コードがデータ内にあるかどうかを確認します。

VB は、データが数値かどうかはあまり気にしません。これは時々噛むことができますが、それ以外の場合には役立ちます. Option Strict は敗北しますが、ほとんどの場合、IMO は実際には必要ありません。アプリの重要性とローカル ポリシーによって異なります。

于 2015-10-15T20:59:48.790 に答える