Измените свойство .Text TextBoxes в массиве TextBox vb.net

У меня есть массив текстовых полей. Скажем, этот:

Dim BreakFast1() As TextBox = {txtMBreak1, txtTBreak1, txtWBreak1, txtThBreak1, txtFBreak1, txtSBreak1, txtSunBreak1}

Что я хочу сделать, так это установить свойство .Text для каждого из текстовых полей массива. Я пробовал это:

For i As Integer=0 to 6
  BreakFast1(i).Text= "Smt"
Next

Без успеха. Что я делаю не так? заранее спасибо


person Pantheo    schedule 19.06.2012    source источник
comment
Это должно работать (хотя вместо этого я бы рекомендовал цикл For Each). А что не работает? Выдает ли это исключение? Не удается скомпилировать?   -  person Steven Doggart    schedule 19.06.2012
comment
Спасибо за ваш комментарий. Выдает исключение NullReferenceException. Я должен проверить, является ли объект нулевым, или использовать ключевое слово New для создания экземпляра объекта. Почему For Each лучше?   -  person Pantheo    schedule 19.06.2012
comment
Я думаю, что все они. Я попытался установить значение i вручную (например, BreakFast1(2).Text=бла-бла), но все равно выдает исключение   -  person Pantheo    schedule 19.06.2012
comment
Являются ли переменные, которые вы использовали для заполнения массива, также нулевыми? Например, если вы поместите точку останова на строку Dim BreakFast1()... и наведете курсор на txtMBreak1, скажет ли он, что это null, или он скажет, ссылается ли он на объект TextBox? А как насчет всех остальных?   -  person Steven Doggart    schedule 19.06.2012
comment
Да ни о чем не говорит. Должен ли я объявить их внутри массива как новое текстовое поле и т. д.?   -  person Pantheo    schedule 19.06.2012


Ответы (1)


В опубликованном вами коде нет ничего плохого, но это предполагает, что текстовые поля, которые вы добавляете в массив, на самом деле ссылаются на созданные объекты TextBox. Если они равны нулю, это, очевидно, не сработает. Чтобы исправить это, у вас есть несколько вариантов:

  • Переместите строку Dim BreakFast1()... ниже, где создается экземпляр этого объекта текстового поля.
  • Установите переменные текстового поля в новые экземпляры перед этой строкой.
  • Или откажитесь от всех этих переменных текстового поля и просто создайте их непосредственно в массиве.

Например:

Dim BreakFast1() As TextBox = {New TextBox(), New TextBox(), New TextBox(), New TextBox(), New TextBox(), New TextBox(), New TextBox()}

Когда вы перебираете их, я бы рекомендовал вместо этого использовать цикл For Each (если нет какой-либо другой причины, по которой вам нужно знать индекс внутри цикла):

For Each i As TextBox In BreakFast1
    i.Text = "Smt"
Next
person Steven Doggart    schedule 19.06.2012