2013-11-28 60 views
0

我有類似Variable with Value of a Label Name變量與控制

但不是一個標籤問題的價值,我試圖用一個列表框

Private Sub processLog(ByVal logFileName As String, ByVal logCateory As String) 
    Dim variableListBox As New ListBox 

    variableListBox = DirectCast(Me.Controls(logCateory), ListBox) 
    variableListBox.Items.Add("HELLO") 

    End Sub 

什麼能可能是錯誤的,上面的代碼,它返回NullReferenceException was unhandledObject reference not set to an instance of an object.就行了,variableListBox.Items.Add("HELLO")

我也有一個計時器來調用上面Sub

Private Sub tmrProcessLogs_Tick(sender As Object, e As EventArgs) Handles tmrProcessLogs.Tick 
     processLog(fileGeneral, lbxGeneral.Name.ToString) 
    End Sub 
+0

可能在容器中沒有名爲'logCateory'的控件,調試器可以幫助您找到確切的問題。 –

+0

'logCategory'是變量用於傳遞控件的名稱。當計時器滴答時,會調用一個'sub'參數,其中第二個參數是'control'的名稱。 – PaulPolon

回答

1

最可能的原因是,給定控件的父是不是Main Form,並儘可能Me.Controls("name")只查找控件的父是主窗體,variableListBoxNothing,因此當您打算訪問Items.Add("HELLO")時觸發錯誤。通過假設logCateory包含的形式(父母或任何級別孩子)的控件之一的名稱

Dim ctrls() As Control = Me.Controls.Find(logCateory, True) 
If (ctrls.Count = 1 AndAlso TypeOf ctrls(0) Is ListBox) Then 
    variableListBox = DirectCast(ctrls(0), ListBox) 
    variableListBox.Items.Add("HELLO") 
End If 

這一切:更換

variableListBox = DirectCast(Me.Controls(logCateory), ListBox) 
variableListBox.Items.Add("HELLO") 

帶。

+0

相同的錯誤:未將對象引用設置爲對象的實例。 – PaulPolon

+0

@PaulPolon這是不可能的。這段代碼避免了這種情況的發生(即使沒有找到任何稱爲logCateory的控件)。請發佈您嘗試過的代碼。它可能找不到任何東西,但只有在找到正確的控件的情況下才能達到variableListBox = ...,因此您引用的錯誤永遠不會被觸發(可能沒有任何反應) – varocarbas

+0

代碼確實工作並接受了您的答案。謝謝,你有我很多時間.. – PaulPolon