Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/19: Рейтинг темы: голосов - 19, средняя оценка - 4.95
87 / 55 / 15
Регистрация: 01.10.2010
Сообщений: 492

Динамическое создание элементов интерфейса вынесено в отдельный класс. Доступ к Controls главной формы

12.02.2012, 16:11. Показов 3944. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Из Ответы на 7 самых частых вопроса по WinForms

Пример динамического создания кнопки:
C#
1
2
3
System.Windows.Forms.Button button1 = new System.Windows.Forms.Button(); // создаем контрол
...
Controls.Add(button1); // добавляем на форму
А как быть в случае если динамическое создание некоторых элементов интерфейса вынесено в отдельный класс? Доступ к Controls главной формы.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.02.2012, 16:11
Ответы с готовыми решениями:

Динамическое создание элементов управления (controls)
Всем приветик! Народ, как правильно динамически создавать controlы путем: Form.Controls.Add 'VB.CommandButton', 'Button' ...

Динамическое создание элементов интерфейса
Хотелось бы создавать кнопочки и др. элементы в аплете динамически, читая информацию из файла-параметра. Реально ли это, позволяет ли...

Динамическое создание элементов интерфейса
Только недавно начал изучать сишарп. Необходимо создать кнопку, которая создает лабел, при нажатии на который он должен исчезнуть написал...

3
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
12.02.2012, 17:40
Не уверен, что понимаю суть вопроса.
Но раз тишина - попробую ответить.
Думаю, если нужны динамические контроллы, то попытка сделать их или их структуры полями Вашего класса, - риск попрощаться с преимуществами дизайнера формы. Он очень трепетно относится к функции инициализации компонентов. Впрочем С++/Forms и С#/Forms сравнивать дело не благодарное.
Написать в отдельном классе методы создающие контроллы наверное можно.
Вот код не точно в тему, но функцию создающую TextBox-ы в нём, вполне можно сделать методом класса. К сожалению для Вас код на C++...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
//в новой форме (для чистоты эксперимента) нужно в верхней части Heigh=330, Width=530
//внизу две не высокие ~ 45...60 кнопки button1 и button2
//это можно сразу за конструктором формы
//********объявляем класс
public: ref class myNamedStringStoragge {
//лаконичнее - структура, а потом массив структур, но так мне кажется лучше видно
static array<String^>^ m_Txt=       gcnew array <String^>(100);//строки для данных?
static array<String^>^ m_Name=  gcnew array <String^>(100);//что делать с этим массивом решайте сами...
static array<TextBox^>^ m_refTxBx=  gcnew array <TextBox^>(100);
 
public: void append_Txt(int index,String^ Txt){
m_Txt[index]+=Txt;
            }
public: void set_Txt(int index,String^ Txt){
m_Txt[index]=Txt;
            }
public: String^ get_Txt(int index){
return m_Txt[index];
            }
public: void set_Name(int index,String^ Nam){
m_Name[index]=Nam;
            }
public: String^ get_Name(int index){
return m_Name[index];
        }
public: void set_refTxBx(int index,TextBox^ refTxBx){
m_refTxBx[index]=refTxBx;
            }
public: TextBox^ get_refTxBx(int index){
return m_refTxBx[index];
        }
    };
//**********************
myNamedStringStoragge^ myTextYashchiCheck;//объявляем экземпляр класса
//**********************
//определяем функцию инициализации (инстантиализации) и добавления текстбокса к форме 
private: System::Windows::Forms::TextBox^ fun_ReternReffToTextBox_New(int index, int tbH, int tbL, int x_location,int y_location)
{
int lustInd=0;
Control::ControlCollection^ myColectionCurrent=gcnew Control::ControlCollection(this);
::IEnumerator^ myCollEnum=myColectionCurrent->GetEnumerator();
while ( myCollEnum->MoveNext() )
   {
       lustInd++;
}
TextBox^ reffToTextBoxNew;
reffToTextBoxNew = (gcnew System::Windows::Forms::TextBox());
this->Controls->Add( reffToTextBoxNew );
reffToTextBoxNew->Location = System::Drawing::Point(x_location, y_location);
reffToTextBoxNew->Name = L"textBox"+Convert::ToString(index);//вот это подойдет для массива m_Namе (-несделал)
reffToTextBoxNew->Size = System::Drawing::Size(tbL, tbH);
reffToTextBoxNew->TabIndex = lustInd;
reffToTextBoxNew->Refresh();
return reffToTextBoxNew;
            }
//***********************************************************
 
 
}
#pragma endregion
//дальше одна глоб. перем. (можно и без нее -и нужно, но так нагляднее)
static int myGlobalTxBxRowStepToParadise=-1; 
//и две функции обработчика
//это для первой кнопки
private: System::Void button1_Click((System::Object^  sender, System::EventArgs^  e) {
//сначала создадим текствоксы и получим на них ссылки... 5 штук
//для этого определимся с параметрами:
             
 int start_x=20;
 int Start_y=30;
 int zazor_x=15;
 int zazor_y=5;
 int h_tbx=25;
 int l_tbx=150;
if(myGlobalTxBxRowStepToParadise==2)myGlobalTxBxRowStepToParadise=-1;
myGlobalTxBxRowStepToParadise++;// размер формы должен быть где-то... Heigh=330, Width=530
//тогда, если 2 невысокие кнопки разместить снизу можно увидеть 3 столбца 
//нажимать поочередно слева->направо -button1, button2
             for(int i=0; i<5; i++){//четыре строки текстбоксов i<5
myTextYashchiCheck->set_refTxBx(i,fun_ReternReffToTextBox_New(i,h_tbx, l_tbx, start_x+(l_tbx+zazor_x)*myGlobalTxBxRowStepToParadise,Start_y+(h_tbx+zazor_y)*i));//и сразу в ящичек
 
             }
for(int i=0; i<5; i++){
    for(int j=0; j<i+1; j++){
        myTextYashchiCheck->get_refTxBx(i)->Text+="ля-";//заполним текстом сразу и текстбоксы...
            myTextYashchiCheck->append_Txt(i,"ля-");//... и ящик
        }
     }
 }
//это для второй...
private: System::Void button2_Click(System::Object^  sender, System::EventArgs^  e) {
for(int i=0; i<5; i++){
    if(myTextYashchiCheck->get_refTxBx(i)) //лень было написать конструктруктор по умолчанию, -надо проверять
                                            //вдруг, кто нажмет ее первой (Бах!)
    myTextYashchiCheck->get_refTxBx(i)->Text=myTextYashchiCheck->get_Txt(4-i);  
     }
}
//на самом деле это врядли может пригодится, но ... хто ж зна?
0
87 / 55 / 15
Регистрация: 01.10.2010
Сообщений: 492
12.02.2012, 18:44  [ТС]
Цитата Сообщение от IGPIGP Посмотреть сообщение
Думаю, если нужны динамические контроллы, то попытка сделать их или их структуры полями Вашего класса, - риск попрощаться с преимуществами дизайнера формы
Для того и используются динамические контролы, т.к. редактором не обойтись. У некоторых сущностей переменное количество атрибутов и атрибуты задаёт сам пользователь. Атрибутам нужно придать значения и заранее не известно какие сформирует пользователь и их типы (для каких-то потребуется combobox, для чего-то textbox и т.д.)

Добавлено через 12 минут
Возможно ли Column DatagridView расположить горизонтально?
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
12.02.2012, 19:20
Цитата Сообщение от MDmitry_ Посмотреть сообщение
Для того и используются динамические контролы
Я не говорил, что этого делать нельзя. Счел уместным, предупредить, что если дизайнер Вам дорог, "как память" стоит сохранять проект и проверять работу дизайнера чаще, что бы вовремя откатить...

Цитата Сообщение от MDmitry_ Посмотреть сообщение
Возможно ли Column DatagridView расположить горизонтально?
Не пробовал. Но мысль интересная
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.02.2012, 19:20
Помогаю со студенческими работами здесь

Динамическое создание элементов интерфейса?
подскажите плз. и/или ткните носом где почитать про динамическое создание элементов интерфейса (фреймы-окна внутри приложения, чекбоксы,...

Динамическое создание элементов интерфейса
С Новым Годом, друзья. В общем, печалька у меня: создаю элементы, а в обработчиках события не знаю как их обработать. public void...

Динамическое создание элементов интерфейса
Здравствуйте. Есть небольшая проблема с динамическим созданием элементов интерфейса. Не понимаю как это сделать в теории: есть 2 кнопки, по...

Динамическое создание элементов интерфейса
Здравствуйте. Мне интересно знать, как динамически создавать элементы интерфейса. Например, в цикле вызывается метод, который создает...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru