Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > Подстановка имени объекта как переменной.


Автор: Colloseum 30.8.2006, 19:56
Значит в одном табе порядка 40 label'ов textBox'ов с именами label1, label2 ... label40 и textBox1, textBox2 ... textBox40.
Имеются текстовые массивы разной длины на основании которых необходимо присвоить названия label'ам, а заодно скрыть ненужные label'ы и textBox'ы.

Так вот хочу чтоб это не вручную прописывать, а например циклом на основании длины массива подписать леблы. Такая себе динамическая форма.

Такое вообще возможно, чето мне кажется что нет, но может другие варианты есть.

Автор: marcusmae 30.8.2006, 20:11
Возможно. У любого панельного контрола ( в т.ч. у TabPage ) есть коллекция контролов, которые на нём содержатся.

Код

tabPage.Controls[...] //индексация по номеру или имени контрола


Так что, Вы можете в цикле прогуляться по всем элементам Controls[] и присвоить их свойствам нужные значения. Естественно, чтобы добраться до специфических свойств, нужно будет явно приводить к label или к textbox :

Код

Label label3 = (Label)tabPage.Controls[2];

Автор: threef 31.8.2006, 19:16
Лучше было бы все эти контролы создать самому, если уж их так много, заодно и определить их параметры. Сомнительное удовольствие размещать 40 текстбоксов. Соответствено контролы можно содержать в своей собссной коллекции со всеми вытекающими...
Код

TextBox [] Editors=new TextBox[4];
for(int i =0;i<Editors.Length;i++)
    {
      Editors[i]=new TextBox();
      Editors[i].Location=new Point(10+150*i,10);
      ...
     }

Автор: marcusmae 31.8.2006, 19:52
threef,

во-первых, динамическое добавление контролов в форму - это прекрасно, но иногда изменившиеся размеры экранных шрифтов очень сильно всё портят : текст не вмещается в место для лабела, соседний контрол налезает и т.п. проблемы. Переносимость форм, нарисованных в дизайнере в этом смысле лучше, потому что там размеры подстраиваются (сделать это ручками куда сложнее, чем в те две строчки, что ты привёл).

во-вторых, коллекции контролов - это коллекции объектов, а не ссылок на них. То есть, если контрол из одной коллекции был добавлен в коллекцию другой панели, то из первой он пропадает.

Автор: mr.DUDA 2.9.2006, 11:37
Цитата(marcusmae @  31.8.2006,  19:52 Найти цитируемый пост)
во-вторых, коллекции контролов - это коллекции объектов, а не ссылок на них. То есть, если контрол из одной коллекции был добавлен в коллекцию другой панели, то из первой он пропадает.

Добавлю, это у Controls так специально сделано, чтобы одно окно нельзя было делать child-ом у нескольких parent-ов, т.к. винда этого не позволяет.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)