vb.net строка для объекта

Мне нужна помощь в приведении строки в объект (который является параметром процедуры). Я также попробовал Ctype, но он не работал.

Public Sub procName(lbl1 as Label, lbl2 as Label, lbl3 as Label) 'supposed i have 10 labels

      'long Code here

       for i as integer = 1 to 3
            dim xL as label = DirectCast(Controls("lbl" & i.ToString), Label)
            xL.text = i.Tostring    '(error here: Object reference not set to an instance of an object.) 
       next

End Sub

5 ответов

Решение

DirectCast(Controls("lbl" & i.ToString), Label) выдает нулевое значение (или ничего)

Что возвращает Controls ("lbl" & i.ToString)? это метка типа?

Редактирование:

У меня не установлен VB... поэтому я не могу проверить следующий код...

    for i as integer = 1 to 3 
        For Each acontrol As Control In Controls
           If acontrol.Name = "lbl" & i.ToString Then
               xL.text = i.Tostring
           End If
       Next
    Next

Как указывает Вивек, xL это Nothing, для вашего i, i.ToString() не может выдать пустое исключение ссылки.

Пытаться

   for i as integer = 1 to 3
        dim xL as label = DirectCast(Controls("lbl" & i.ToString), Label)
        If xL IsNot Nothing
            xL.text = i.Tostring    
        End If
   next

Вместо того, чтобы передавать 3 разных ярлыка, вы можете передать список ярлыков и пройти по нему. Таким образом, ваша функция станет более динамичной и чистой.

Public Sub procName(ByVal labels As List(Of Label))

        Dim i As Integer = 1

        For Each lbl As Label In labels

            Dim xL As Label = lbl

            xL.Text = i.ToString

            i += 1
        Next

 End Sub

Код, который вы показываете, ожидает найти в вашей форме три элемента управления Label (или, по крайней мере, в рамках выполняемого кода) с именами lbl1, lbl2 и lbl3.

Ошибка говорит вам, что один или несколько из этих элементов управления не могут быть найдены.

Мне нужно было сделать что-то подобное, и я получил ту же ошибку,

(В экземпляре объекта не задана ссылка на объект.

в аналогичной строке, например:

      dim xL as label = DirectCast(Controls("lbl" & i.ToString), Label)

Я смог исправить это, добавив в элементы управления точное местоположение элемента управления, в моем случае TabPage3:

      dim xL as label = DirectCast(TabPage3.Controls("lbl" & i.ToString), Label)

и вуаля, ЭТО РАБОТАЛО!

Другие вопросы по тегам