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)
и вуаля, ЭТО РАБОТАЛО!