0

文字列からテキストボックスに変換するためにctypeを使用しています。これらのテキストボックスはフォーム上にあります。変換後、データを取得してテキストボックスに表示します。初めてフォームを開くと、すべてうまくいきます。フォームを終了して再実行すると、ctype はエラー "NullReferenceException" をスローします。debug で、1 つの ctype が何も返さないことがわかりました。なぜこれが起こるのですか?

以下のコード:

Private Sub CompanyId_SelectedIndexChanged(sender As Object, e As EventArgs) Handles CompanyId.SelectedIndexChanged, FundType.SelectedIndexChanged, FundGroup.SelectedIndexChanged, Currency.SelectedIndexChanged, Frequency.SelectedIndexChanged, MngmtFees.SelectedIndexChanged
               If INLOAD = True Then Exit Sub
        Dim cmb As ComboBox
        cmb = DirectCast(sender, ComboBox)

        Dim TXTNAME As String
        TXTNAME = cmb.Name & "_Name"

        Dim NEWTEXT As TextBox = CType(Me.Controls(TXTNAME), TextBox)

        *****If NEWTEXT Is Nothing Then MsgBox("hOW TO???")*****


        If cmb.Name = "CompanyId" Then NEWTEXT.Text = dc.Tables("Company").Rows(cmb.FindStringExact(cmb.Text)).Item(1).ToString
        If InStr(cmb.Name, "Fees") > 0 Then NEWTEXT.Text = dc.Tables("Fees").Rows(cmb.FindStringExact(cmb.Text)).Item(1).ToString
        If NEWTEXT.Text = "" Then NEWTEXT.Text = dc.Tables(cmb.Name).Rows(cmb.FindStringExact(cmb.Text)).Item(1).ToString()
4

3 に答える 3

3

その例外をスローすることがわかる唯一のものはMe.Controls(TXTNAME). この場合、 の値がTXTNAME正しく設定されていないか、コントロールがロードされていないため、Me.Controlsは何も返しません。これは、 TextBox に何もキャストしていないことを意味します。NullReferenceException

TryCastを使用するようにキャストを変更する

Dim NEWTEXT As TextBox = CType(Me.Controls(TXTNAME), TextBox)

する必要があります

Dim NEWTEXT As TextBox = TryCast(Me.Controls(TXTNAME), TextBox)

その後、NULL の NEWTEXT をチェックできます。

If NEWTEXT isnot nothing then

else

endif
于 2013-04-28T16:16:32.257 に答える