0
Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button.Click
    Dim CaseCompareItem As String = ListBox.SelectedValue
    Select Case CaseCompareItem

        Case "MyText" Or "NotText"
            MsgBox("YAY!!! IT WORKED!!!!!")
    End Select
End Sub

(私はコードをかなり短くしました: 不要な 12 の異なるケースを持ちたくありませんでした。)

私が得るのは実行時エラーだけです。エラーは次のとおりです。

System.InvalidCastException は処理されませんでした メッセージ = 文字列 "Canoe (Not In Service) 1MP" から型 'Long' への変換は無効です。
System.Threading.ThreadHelper.ThreadStart() で System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) で Boolean ignoreSyncCtx) InnerException: System.FormatException メッセージ = 入力文字列が正しい形式ではありませんでした。ソース = Microsoft.VisualBasic StackTrace: Microsoft.VisualBasic.CompilerServices.Conversions.ParseDecimal (文字列値、NumberFormatInfo NumberFormat) で Microsoft.VisualBasic.CompilerServices.Conversions.ToLong (文字列値) InnerException: FormatException Message=入力文字列の形式が正しくありません。ソース = Microsoft.VisualBasic StackTrace: Microsoft.VisualBasic.CompilerServices.Conversions.ParseDecimal (文字列値、NumberFormatInfo NumberFormat) で Microsoft.VisualBasic.CompilerServices.Conversions.ToLong (文字列値) InnerException: FormatException Message=入力文字列の形式が正しくありません。ソース = Microsoft.VisualBasic StackTrace: Microsoft.VisualBasic.CompilerServices.Conversions.ParseDecimal (文字列値、NumberFormatInfo NumberFormat) で Microsoft.VisualBasic.CompilerServices.Conversions.ToLong (文字列値) InnerException:

なぜこうなった???

4

1 に答える 1

2

ステートメントでの使用Orは、への変換で例外がスローCaseされる原因となる整数型を意味します。Long「,」に置き換えます。

この種の間違いは、Option Strict On を拒否する人によく見られます。これは、書き込み時にフラグが立てられます。

SelectedItemプロパティの代わりにプロパティを使用すると、おそらくより多くの成功を収めることができSelectedValueます。また、オブジェクトの値にアクセスする前に、オブジェクトが何もないかどうかを確認する必要があります。

    If Not ListBox1.SelectedItem Is Nothing Then
        Dim CaseCompareItem As String = ListBox1.SelectedItem.ToString
        Select Case CaseCompareItem

            Case "MyText", "NotText"
                MsgBox("YAY!!! IT WORKED!!!!!")
        End Select
    End If
于 2013-09-18T23:11:55.810 に答える