2013-11-28 5 views
0

У меня есть проблема, похожая на Variable with Value of a Label Nameпеременных со значением контроля

Но вместо метки, я пытаюсь использовать ListBox

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") выглядит только для управления чей родитель является Основной формой, variableListBox - Nothing и, таким образом, вы запускаете ошибку, намереваясь получить доступ к Items.Add("HELLO"). Заменить

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

С:

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 

Все это в предположении, что logCateory содержит имя одного из элементов управления в форме (родителя или ребенка на любом уровне).

+0

той же ошибки: ссылка на объект не установлена ​​в экземпляр объекта. – PaulPolon

+0

@PaulPolon Это невозможно. Этот код избегает этого (даже в случае отсутствия контроля с именем logCateory). Пожалуйста, напишите код, который вы пробовали. Он может не найти ничего, кроме переменнойListBox = ... достигается только в случае нахождения правильного элемента управления и, следовательно, ошибка, с которой вы ссылаетесь, никогда не будет запущена (может быть, ничего не происходит) – varocarbas

+0

код действительно работает и принял ваш ответ , спасибо, у меня у меня много времени. – PaulPolon

Смежные вопросы