0

文字が入力された場合、または数値として範囲外の場合に例外をキャッチするためのこのコード行がありますが、数値データのキャッチを避けるために WHEN を追加しました。コードを 2 回実行するのを避けるために、case ステートメントの前に例外エラーを使用してそれを使用するにはどうすればよいでしょうか。それはあなたにとって明らかですが、私はそれを理解しています。ここにコードがあります...

    Try
        'Integer Levels: intLvls is egual to the assigned text box, the first one from
        'the top, this line of code allow the user input to be captured into a variable.
        intLvls = txtBoxLvl.Text
    Catch ex As Exception When IsNumeric(intLvls)
        ErrTypeLetterFeild1()
    Finally
        analysingvalues1()
    End Try

やりたいこと: 例外エラーを参照するまでループを使用して、コードの次の部分を実行しないようにします。

 Private Sub analysingvalues1()
    Do Until IsNumeric (ex As Exception)<------how do i do this???

    Loop

コードのケース部分:

Select Case intLvls
        'User is prompt with the following label: lblLvl "Level of salespersons 1 - 4"
        'to make a choice from 1 to 4 as available values.
        Case 1 To 4
            'This line regulates the range of acceptable values, first textbox: must be egual
            'or higher than 1 and lower or egual to 4. Upon such rules a validation becomes
            'correct and is directed to the isValidCalculation sub.
            isValidCalculation()
        Case Is < 1
            ErrType1NumberRangeFeild()
        Case Is > 4
            ErrType1NumberRangeFeild()
        Case Else
            If txtBoxLvl.Text = "" Then
                ErrTypeClear1()
            Else
                If Not IsNumeric(txtBoxLvl.Text) Then
                    ErrType1NumberRangeFeild()
                Else
                    ErrTypeLetterFeild1()
                    ErrTypeClear1()
                End If
            End If
    End Select 'Ending choices.
End Sub

助けてくれてありがとう!

4

1 に答える 1

3

Option Strict をオンにすると、次のようになります。

intLvls = txtBoxLvl.Text

コンパイルされなくなります。これは、あなたが何か臭いことをしていることを示しているはずです。

Option Strict をオンにする

正しい解決策は、ランタイムが文字列を int にキャストして例外をキャッチすることをやみくもに許可しないことです。

文字列のユーザー入力を整数に変換する場合、不正な入力は例外的な状態ではありません。これは、予期して防御的にコーディングする必要があるものです。

私はそれを次のように書き直します:

    'Integer Levels: intLvls is egual to the assigned text box, the first one from
    'the top, this line of code allow the user input to be captured into a variable.

    if integer.TryParse( txtBoxLvl.Text, intLvls )
        analysingvalues1()
    else
        ErrTypeLetterFeild1()

編集 - 以下のクリスが指摘したように、私は Option Strict を意味していました。Explicit と Strict を使用することをお勧めします。利用可能な場合は Infer を使用します。

于 2012-04-07T02:30:57.503 に答える