2012-12-21 96 views
3

好奇,以試圖在VB.net調試我的程序時,爲什麼我收到此錯誤獲取對象引用錯誤在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 

如果有人解釋爲什麼我收到這個錯誤我將非常感謝。

+1

t大小沒有指定的類型。這是故意的嗎?我懷疑你沒有打開Option Strict。幫你一個忙,並把選項嚴格打開。 –

回答

4

像S1和S2類級別變量是在對象施工過程中非常早的初始化。在調用InitializeComponent()方法之前,您的視覺控件(如Combobox1和Combobox2)不會創建,直到幾乎在構造函數的末尾。

因此,當您嘗試將S1設置爲Combobox1.Text的值時,Combobox1對象尚未創建,並且引用Null對象的.Text屬性會引發該異常。

相反,在你的構造結束設置這些值,或響應像負載的事件。

您也可以嘗試建立他們的財產......是這樣的:

Private Property S1() As String 
    Get 
     Return ComboBox1.Text 
    End Get 
    Set (ByVal value As String) 
     ComboBox1.Text = value 
    End Set 
End Property 
+0

我將如何設置構造函數中的順序?感謝你的回答。 – Tlm7

+0

將代碼的行移動到構造函數的底部。構造函數位於另一個文件(設計器文件)中,這就是爲什麼我還推薦使用Load事件。 –

+0

謝謝一個男人。 – Tlm7