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 回答