Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
 Аватар для Doomer3D
180 / 180 / 32
Регистрация: 23.11.2012
Сообщений: 344
Записей в блоге: 1

Динамическое создание группы контроллов на форме в зависимости от ситуации

23.11.2012, 07:52. Показов 1287. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.

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

Я пока склоняюсь к мысли создания XML-протопипа формы, а потом на основании этого прототипа создавать контролы, но метод этот довольно сложный, если писать с нуля.

Может кто-то подсказать готовое решение такой задачи?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.11.2012, 07:52
Ответы с готовыми решениями:

Динамическое создание группы TextBox на форме
Как сделать так, что бы при нажатии на кнопку генерировалось н-количество TextBox?

Динамическое создание контроллов
здравствуйте задача состоит вот в чем создать кнопки 7Х5 динамически порожденные и я незнаю как сделать чтобы на кнопку можно было повесить...

Динамическое создание контроллов в C#
Всем привет! У меня проблемка незначительная: Создаю динамически 27 Label, но на форме выводит текст только первого(нулевого элемента)....

5
 Аватар для Энтомолог
141 / 182 / 44
Регистрация: 25.04.2012
Сообщений: 2,623
Записей в блоге: 5
23.11.2012, 14:46
По аналогии
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
static Button[] button=new Button[5];
        static RadioButton[] rbutton = new RadioButton[3];
        static Label[] label=new Label[7];
        static TextBox[] textbox=new TextBox[9];
        static ToolTip t= new ToolTip();
        static string connectionString;
        static ListBox[] listbox = new ListBox[1];
Control[][] allcontrolsarray=new Control[][]{button,rbutton,label,textbox,listbox}; 
Panel panel1;//ее можно использовать как сформированный бэкворкером набор компонентов, меняя visible и enabled
 
private void AddControls()
        {
            try
            {
                foreach (Control[] x in allcontrolsarray)
                    foreach (Control y in x)
                     if (y!=null) this.Controls.Add(y);
            }
            catch { MessageBox.Show(text[4]); }
        }      
 
        private void RemoveControls()
        {
            try
            {
                this.Controls.Clear();
                foreach (Control[] x in allcontrolsarray)
                    foreach (Control y in x)
                        if (y != null) y.Dispose();
            }
            catch { MessageBox.Show(text[6]); }
        }
 
allcontrolsarray и его наборы контролов меняются твоими галочками
Добавлено через 19 минут
Если нужно хранить галочки, то можно создавать глобальный BitArray и сохранять его 1 строчкой типа 0101010 в текстовый файл и из него восстанавливать, сопоставляя 1 значение по порядковому номеру 1 контролу, но можно еще и сжать эту строчку.
0
 Аватар для Doomer3D
180 / 180 / 32
Регистрация: 23.11.2012
Сообщений: 344
Записей в блоге: 1
23.11.2012, 15:22  [ТС]
Боюсь, что меня не так поняли.

Пусть на форме есть несколько полей: название организации, изображение и адрес.

Если включена галочка "показывать изображение", то будет сформирована форма, где слева-вверху будет изображение, а справа от него - название и адрес, одно под другим. Если же галочки нет - то то же самое, но без изображения. Т.е. расположение и размеры контролов зависят от настроек.

Настроек таких может быть достаточно много и рассматривать их комбинации в коде - не вариант. Желательно как-тот абстрагироваться от кода...
0
 Аватар для Энтомолог
141 / 182 / 44
Регистрация: 25.04.2012
Сообщений: 2,623
Записей в блоге: 5
23.11.2012, 16:46
Настройки контролов у тебя будут меняться, помимо visible и enabled? Даже если ты создашь базу данных, тебе все равно придется их вписывать в такую конструкцию.

Добавлено через 8 минут
Например
C#
1
2
3
4
5
6
7
8
9
10
if (flag==true)
{
button[0] = new Button() { Text = text[9], Location = new Point(100, 100), AutoSize = true,FlatStyle=FlatStyle.Flat };
t.SetToolTip(button[0], text[10]);
button[0].Click += new EventHandler(editload);
}
 
AddControls();//например в обработчике кнопки
//работа на форме
RemoveControls();//при переходе к другому содержимому
Никакого перебора значений не требуется.
0
 Аватар для Doomer3D
180 / 180 / 32
Регистрация: 23.11.2012
Сообщений: 344
Записей в блоге: 1
23.11.2012, 17:04  [ТС]
1. Зачем мне хлам из невидимых контролов или неактивных?
2. Если какая-то часть формы не видна, остальная должна "подгоняться" и использовать освободившееся место, либо изменять размер формы.

В итоге получается что-то вроде грида из контролов. Я могу это реализовать сам, но это займет кучу времени, поэтому и спрашиваю, может кто-то подскажет готовое решение.
0
 Аватар для Энтомолог
141 / 182 / 44
Регистрация: 25.04.2012
Сообщений: 2,623
Записей в блоге: 5
23.11.2012, 19:21
Откуда возьмется хлам, если ты будешь перед каждым AddControls на форме вызывать RemoveControls, который их сотрет отовсюду ? Не понял, что ты хотел сказать пунктом 2.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.11.2012, 19:21
Помогаю со студенческими работами здесь

Динамическое создание контроллов на форме
Приветствую уважаемые коллеги! Подскажите пожалуйста, как сделать так что бы при загрузке формы, на ней создавалось поле с заранее...

Динамическое создание контроллов на вкладках TabControl
Цель: с помощью элемента tabcontrol в c# на одной странице этого элемента задать некое целое число n, а на второй странице создать n штук...

Динамическое создание и удаление TabSheet в исключительной ситуации
Здравствуйте! Задача: нужно проверить вводимое значение и если это не число, то нужно вывести в TabSheet сообщение об ошибке. С...

Динамическое создание различных элементов управления в зависимости от условия
Написать программу с кнопкой и тремя полями ввода. При нажатии на кнопку программа анализирует содержимое первого поля и динамически...

Динамическое создание объектов на форме из БД
Есть таблица в БД - "ящики", и связанные таблицы с доп. информацией. Необходимо пробегаться по таблице "ящики" и добавлять...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru