2016-06-07 3 views
0

Мне нужно установить текст некоторых элементов управления.VB.Net Управление контуром по именам с использованием переменных

У меня есть Form с некоторыми CheckBoxes a TextBoxes.

В VBA (Если у меня есть 5 TextBoxes под названием "TextBox1", "TextBox2", ... "TextBox5") я могу использовать что-то вроде этого:

For n = 1 To 5 
    Me("TextBox" & n).Text = NeededValue 
Next n 

Я знаю, что-то вроде этого является также возможно в VB.Net, но я не смог найти правильный синтаксис (и я не нашел похожих кодов на SO).

Я судимый используя

Me.Controls() 

Но я не могу вставить имя элемента управления таким образом

+0

Что делать, если кто-то решит использовать лучше (более значимые) имена управления? Это сломает ваш код незаметно. Не позволяйте вашей логике зависеть от имен управления. –

+0

@TimSchmelter Я использовал «значащие» контрольные имена, но мне нужно показать и оценить только некоторые из них (у меня не было никаких лучших идей). Предлагаются apprecciated. – genespos

+1

Вы можете сгруппировать их в элемент управления контейнера, например 'Panel' или' GroupBox'. Тогда это просто: 'Dim myTextboxes = textBoxPanel.Controls.OfType (Of TextBox) .ToArray()' –

ответ

0

Используйте For Each, а затем тест с TypeOf найти все TextBoxes в вашем form как:

For Each myObject1 As [Object] In Me.Controls 
    If TypeOf myObject1 Is TextBox Then 
     TryCast(myObject1, TextBox).Text = "NeededValue" 
    End If 
Next 

также:

Dim myText = {TextBox1, TextBox2, TextBox3, TextBox4, TextBox5} 
     For Each btn In myText 
      btn.Text = "NeededValue" 
     Next 

For i As Int32 = 1 To 5 
    Dim Txt = Me.Controls.Find("TextBox" & i, True) 
    If Txt.Length > 0 Then 
     Txt(0).Text = "blah" 
    End If 
Next 

Или:

For i As Int32 = 1 To 5 
     Dim Txt = Me.Controls.Find("TextBox" & i, True) 
     If Txt.Length > 0 Then 
      Txt(0).Text = "NeededValue" 
     End If 
    Next 
3
Me.Controls.Find("TextBox" & n, True) 

бы подобный подход к вашему VBA Style.

+0

Я получаю ошибку, когда пытаюсь установить «Текст». Невозможно преобразовать 'Control()' в 'ComboBox' (я использовал' CType (.Find ("CBox_Phase" & r, True), ComboBox) ' – genespos

+0

Возвращаемое значение представляет собой массив элементов управления. один и бросить его как текстовое поле.Я бы порекомендовал вам подумать о вашем способе управления элементами управления. Я не думаю, что это хороший способ перебора элементов управления по имени в целом. Как я вижу, вы пришли из VBA, я могу только предлагаю вам переучивать VB.NET с нуля и забыть о вещах VBA. И альтернативный способ состоял бы в том, чтобы сохранить все элементы управления, которые вы хотите изменить, в текстовом поле (в текстовом поле), чтобы вы могли просто сделать это с помощью каждый и список. – Mono

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