Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/65: Рейтинг темы: голосов - 65, средняя оценка - 4.57
6 / 6 / 3
Регистрация: 20.04.2012
Сообщений: 303

Как динамически создать Label

14.06.2012, 15:36. Показов 13917. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Мне нужно по нажатию кнопки открыть форму в которой будут создано столько компонентов Label, сколько элементов в масиве строк который я передам этой форме. Ну и соответственно ввести строки в Label'ы.
как прописывать создание элемента я знаю вся загвоздка в том что писать внутри цикла:
C#
1
2
3
4
foreach (string str in strArray)
{
   ... ??? ...
}
еще желательно что бы форма эта размером подгонялась под эти Label'ы, так как их может быть 1 а может быть и 10, что бы небило много пустого места
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.06.2012, 15:36
Ответы с готовыми решениями:

Динамически создать Label
Привет, буду благодарен любой помощи. <?xml version="1.0" encoding="utf-8" ?> <students> <mainStudents> ...

Создание Label динамически
Нужно создать n-ое количесво Label'ов, вот код: for (int i = 0; i < n; i++) { Label lab = new Label(); ...

BackColor у динамически созданных label
Нужно отобразить лейблы, цвет одних сделать зеленым, а других красным Label term = new Label; j = 0; foreach (array_l...

10
251 / 163 / 14
Регистрация: 10.03.2012
Сообщений: 544
14.06.2012, 15:45
Внутри цикла создаете Label и присваиваете ее свойству Text значение переменной str.

Размер формы можно вычислить, если высота каждого Label одинакова, умножив эту высоту на количество созданных меток.
1
 Аватар для xZooYx
120 / 101 / 9
Регистрация: 12.06.2012
Сообщений: 322
Записей в блоге: 12
14.06.2012, 15:50
C#
1
2
3
4
5
6
7
var strArray = new[] { "1", "2", "3" };
for (int i = 0; i < strArray.Length; i++)
{
    var label = new Label();
    label.Text = strArray[i];
    flowLayoutPanel1.Controls.Add(label);
}
1
6 / 6 / 3
Регистрация: 20.04.2012
Сообщений: 303
14.06.2012, 16:01  [ТС]
почему var label а не Label label = new Label() ?
если будет много Label'ов как оно присвоит им разные имена (label1, label2 и т.д.) ?
0
251 / 163 / 14
Регистрация: 10.03.2012
Сообщений: 544
14.06.2012, 16:19
1.Переменную label объявите перед циклом как Label.
2.Измените свойство label.Name на нужное, например,
C#
1
label.Name = "label" + i.ToString();
0
6 / 6 / 3
Регистрация: 20.04.2012
Сообщений: 303
14.06.2012, 16:36  [ТС]
и если у меня не совсем массив а reader, в нем столбец строк из таблици БД ?
C#
1
2
3
SqlCommand command = new SqlCommand(queryString, connection);
                connection.Open();
                SqlDataReader reader = command.ExecuteReader();
0
 Аватар для xZooYx
120 / 101 / 9
Регистрация: 12.06.2012
Сообщений: 322
Записей в блоге: 12
14.06.2012, 16:39
C#
1
2
3
4
5
6
7
8
var strArray = new[] { "1", "2", "3" };
var label = new Label();
for (var i = 0; i < strArray.Length; i++)
{
    label.Text = strArray[i];
    label.Name = "label" + i;
    flowLayoutPanel1.Controls.Add(label);
}
var позволяет не запариваться с типами, компилятор сам подставляет нужны тип, так просто быстрее.

Добавлено через 1 минуту
Хотя с выносом переменной label за пределы цикла я бы поспорил, в некоторых ситуациях это может выйти боком...
1
6 / 6 / 3
Регистрация: 20.04.2012
Сообщений: 303
15.06.2012, 11:24  [ТС]
попробовал:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
int x = 5, y = 5, LH = 0,  i = 0;
Label label = new Label();
while (reader.Read())
                {
                    label.Name = "label" + i.ToString();
                    label.Text = reader[0].ToString();
                    label.AutoSize = true;
                //    label.Location = new Point(x, y + LH);
                    label.MaximumSize = new Size(400, 0);
                 //   LH = label.Height;
                    this.Controls.Add(label);
                    i++;
                }
все выводит один поверх другого, надо как то с Location поиграться с помощью X и Y, есть варианты ?

например начальная Location была 5.5, а потом брать высоту только что нарисованного Label'a и плюсовать к Y

Добавлено через 18 часов 36 минут
Цитата Сообщение от xZooYx Посмотреть сообщение
Хотя с выносом переменной label за пределы цикла я бы поспорил, в некоторых ситуациях это может выйти боком...
да, выносить не надо так как оно все присваивает одному и тому же label

осталось решить проблему как брать высоту предыдущего и с помощью её вычеслять location следующего ((
0
 Аватар для xZooYx
120 / 101 / 9
Регистрация: 12.06.2012
Сообщений: 322
Записей в блоге: 12
15.06.2012, 11:58
Цитата Сообщение от mikh Посмотреть сообщение
осталось решить проблему как брать высоту предыдущего и с помощью её вычеслять location следующего ((
Может попробовать как то так (складывать все высоты и использовать их в качестве координаты по y):
C#
1
2
3
4
5
6
var height = 0;
while (reader.Read())
                {
                   label.Location = new Point(x, height);
height += label.Height;
                }
1
6 / 6 / 3
Регистрация: 20.04.2012
Сообщений: 303
15.06.2012, 12:10  [ТС]
да, спасибо! а я пытался присвоить предыдущее значение и думал почему оно все в куче, а Height с каждым разом все расти и расти должен.

Добавлено через 6 минут
подскажите можно ли как то размер формы подгонять под края этих Label'ов ? Что бы если 1 Label был так форма узкая, если 5-10 форма чуть больше ...
или как-то скролл бар прикрутить, что бы если эти Label'ы вылазили за форму по прокруткой их просмотреть ?
0
251 / 163 / 14
Регистрация: 10.03.2012
Сообщений: 544
15.06.2012, 17:43
После цикла создания Label'ов свойству Height формы присвойте значение переменной height. Тогда она будет иметь высоту такую же, как и сумма высот всех Label'ов. А свойству Width присвойте значение 400 (в Вашем коде это максимальная длина Label).
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.06.2012, 17:43
Помогаю со студенческими работами здесь

Как динамически создать кнопку?
Подскажите пожалуйста, как мне сделать кнопку &quot;Далее&quot; на форме?

Как создать динамически RadioButton
Как создать динамически RadioButton, есть форма я хочу при запуске формы чтобы на форме появился RadioButton созданный не из панели...

Хранение динамически созданных элементов label
Здравствуйте. Возник следующий вопрос: Динамически создаю label при нажатии на форму: Label v = new Label(); v.Location =...

Изменить текст label, созданного динамически
Не понимаю как изменить , к примеру текст label1.. Я создал динамично label1 : Label label1 = new Label(); // Создание текста...

Поместить на форму динамически созданный Label
Доброго времени суток. Вот я создал новую форму и метку: Form help = new Form(); Label help_label = new Label(); ...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
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