2015-05-03 3 views
1

Так что скажите, что у меня есть 10 кнопок в моей форме с именем btn1, btn2, btn3 и т. Д. И я хочу что-то задать для каждого из своих свойств текста. Поэтому я делаю что-то вроде:Ссылка на объект через строку

For i = 1 To 10 
    //something like: 
    ["btn" & i].text = 'blah' //hope you understand what I meant here 
Next 

Можно ли это также сделать с переменными? Как у меня есть var1, var2, var3 и т. Д. И если бы я хотел управлять каждым из них, могу ли я сделать это в цикле, а не по одному?

+2

'Me.Controls (« btn »& i.ToString()). Текст« близок к тому, что вы хотите. либо сохранить имя в списке или сами ссылки на управление. Tun on 'Option Strict', хотя' 'btn" & i' является бессмыслицей – Plutonix

+0

Возможный дубликат [Ссылка на объект с использованием строки переменных в Visual Basic 2010] (http://stackoverflow.com/questions/3887878/referencing-an- object-use-a-variable-string-in-visual-basic-2010) – Enigmativity

+0

Когда я пытаюсь выполнить Me.Controls («btn» & i.ToString()). Текст Я получаю исключение: «Ссылка на объект не установите экземпляр объекта. " –

ответ

0

Чтобы получить элементы управления из формы, посмотрите на это https://stackoverflow.com/a/3426721 это C#, но легко понять.

+0

Метод FYI GetNextControl() WinForms выполняет итерацию по всем элементам управления, включая элементы управления, вложенные в контейнеры. Он возвращает только элементы управления, которые могут быть табуляторами. Не идеально - не смотрит в SplitContainer(), возвращает полосы прокрутки, может быть, другие недостатки. – rheitzman

0

Обратите внимание, что коллекция Controls() является свойством контейнера. Форма представляет собой контейнер. Если у вас есть элементы управления в контейнере на форме, например. TabControl кнопки в TabControl находятся не в элементах родительской формы, а в TabControl.Controls.

Dim container As Control = Me 
    For i = 1 To 2 
     container.Controls("Button" & i).Text = "blah2" 
    Next 
Смежные вопросы