3

VB.netでプログラムをデバッグしようとすると、なぜこのエラーが発生するのか知りたい

Object Reference not set to an instance of the object.

4行目と5行目が原因でこのエラーが発生していると表示されます。

Public Class Form1

Dim tSize
Dim S1 As String = ComboBox1.Text
Dim S2 As String = ComboBox2.Text

Private Sub FitContents()
    tSize = TextRenderer.MeasureText(TextBox3.Text, TextBox3.Font)
    TextBox3.Width = tSize.Width + 10
    TextBox3.Height = tSize.Height
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    TextBox1.Text = S1
    TextBox2.Text = S2
End Sub

Private Sub TextBox3_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox3.TextChanged
    Call FitContents()
End Sub

End Class

私がこのエラーを受け取った理由を誰かが説明してくれたら、私は非常にありがたいです。

4

1 に答える 1

4

S1 や S2 などのクラス レベル変数は、オブジェクト構築プロセスの非常に早い段階で初期化されます。Combobox1 や Combobox2 などのビジュアル コントロールは、InitializeComponent() メソッドが呼び出されるまで作成されません。これはコンストラクターのほぼ最後まで行われません。

したがって、S1 を Combobox1.Text の値に設定しようとした時点では、Combobox1 オブジェクトはまだ作成されておらず、Null オブジェクトの .Text プロパティを参照しようとすると、その例外が発生します。

代わりに、これらの値をコンストラクターの最後に設定するか、Load などのイベントに応答して設定してください。

それらをプロパティとして構築することもできます...次のように:

Private Property S1() As String
    Get
        Return ComboBox1.Text
    End Get
    Set (ByVal value As String)
        ComboBox1.Text = value
    End Set
End Property
于 2012-12-21T03:12:25.197 に答える