Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/302: Рейтинг темы: голосов - 302, средняя оценка - 4.90
1 / 1 / 0
Регистрация: 14.01.2010
Сообщений: 5

Динамическое создание элементов интерфейса

14.01.2010, 20:00. Показов 56672. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Только недавно начал изучать сишарп. Необходимо создать кнопку, которая создает лабел, при нажатии на который он должен исчезнуть
написал код:
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace justtest
{
    public partial class Form2 : Form
    {
        
        public Form2()
        {
            InitializeComponent();
        }
 
        public void Form2_Load(object sender, EventArgs e)
        {
            Button bt = new Button();
            bt.Name = "button";
            bt.Text = "Кнопка";
            bt.Left = 150;
            bt.Top = 15;
            bt.Click += this.bt_Click_1;
            this.Controls.Add(bt);
            
            
        }
 
        public void bt_Click_1(object sender, EventArgs e)
        {
            
            Label lb1 = new Label();
            lb1.Name = "Label1";
            lb1.Text = "Лабел";
            lb1.Left = 200;
            lb1.Top = 200;
            lb1.Click+=new EventHandler(lb1_Click);
            this.Controls.Add(lb1);
 
        }
        public void lb1_Click(object sender, EventArgs e)
        {
            this.Controls.Remove(lb1);
        }
    }
}
выдает ошибку: Элемент "lb1" не существует в текущем контексте. Чувствую, что глупая ошибка по незнанию, объясните плз в чем дело
1
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.01.2010, 20:00
Ответы с готовыми решениями:

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

Динамическое создание элементов интерфейса вынесено в отдельный класс. Доступ к Controls главной формы
Из Ответы на 7 самых частых вопроса по WinForms Пример динамического создания кнопки: System.Windows.Forms.Button button1 = new...

Создание элементов интерфейса по данным из БД
Здравствуйте. Вопрос в следующем: есть приложение, есть база данных, условно в базе данных в нужной таблице у нас 10 записей, нужно чтобы в...

14
10 / 12 / 2
Регистрация: 13.01.2010
Сообщений: 363
14.01.2010, 20:22
C#
1
public Label lb1 = new Label();
объяви глобальную переменную вне функции
1
1 / 1 / 0
Регистрация: 14.01.2010
Сообщений: 5
14.01.2010, 20:34  [ТС]
Спасибо, так и знал что глупая ошибка=)
0
7 / 7 / 3
Регистрация: 28.10.2010
Сообщений: 220
10.04.2011, 19:17
А как не объявляя вне функции глобальные переменные, создать на панели в цикле необходимое количество лейблов и картинок, с вертикальной прокруткой?

Добавлено через 1 час 30 минут
нашел вариант решения, но вылазит ошибка:
System.IndexOutOfRangeException не обработано
Message=Индекс находился вне границ массива.
Сам используемый код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public partial class Form1 : Form
    {
        Label[] label;
        private void button2_Click(object sender, EventArgs e)
         {
            label = new Label[j];
             for ( i = 0; i < list.Count; i++)   // цикл этот используеться для других целей.
            {
                    label[j] = new Label();           // вот тут ошибка и вылазит...         
                    j++;
                    panel1.Controls.Add(this.label[j]);
                    label[j].Location = new Point(3 , j*10-10 );
                    label[j].Text = text;
            }
1
 Аватар для Filislav
339 / 285 / 62
Регистрация: 02.09.2010
Сообщений: 547
10.04.2011, 19:54
прогнал
0
7 / 7 / 3
Регистрация: 28.10.2010
Сообщений: 220
10.04.2011, 20:00
i и j- независимые переменные, и соответственно лейблы создаются, пока идет цикл по i. но создаються они по j.
Там кстати, перед началом цикла есть строка:
public int j=2;

P.S. У всех бывает).
0
 Аватар для Mikant
1322 / 995 / 127
Регистрация: 08.12.2009
Сообщений: 1,299
10.04.2011, 21:11
прошу. метод ломовой.
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
using System.Drawing;
using System.Windows.Forms;
 
namespace WindowsFormsApplication10 {
    public class Form1 : Form {
 
        //public Form1() {
        //    InitializeComponent();
        //}
 
        protected override void OnLoad(System.EventArgs e) {
            Button button1 = new Button() { Text = "Жми", Location = new Point(100, 100) };
            Panel panel1 = new Panel() { Dock = DockStyle.Fill, Name = "panel1" };
 
            button1.Click += new System.EventHandler(button1_Click);
 
            panel1.Controls.Add(button1);
            this.Controls.Add(panel1);
 
            base.OnLoad(e);
        }
 
        private void button1_Click(object sender, System.EventArgs e) {
            Label[] labels = new Label[11];
            for (int i = 0; i < labels.Length; i++) {
                labels[i] = new Label() { Text = "label " + i.ToString(), Location = new Point(i * 23, i * 23) };
                labels[i].Click += new System.EventHandler(label_Click);
            }
            this.Controls["panel1"].SuspendLayout();
            this.Controls["panel1"].Controls.AddRange(labels);
            this.Controls["panel1"].ResumeLayout();
        }
 
        private void label_Click(object sender, System.EventArgs e) {
            this.Controls["panel1"].Controls.Remove((Control)sender);
        }
 
    }
}
3
7 / 7 / 3
Регистрация: 28.10.2010
Сообщений: 220
10.04.2011, 21:31
И еще. В list, с которого берется текст, также встречаются иногда картинки. list- это список экземпляров собственного класса, где есть два члена- текст(у каждого экземпляра), и картинка-у некоторых. Так вот, как еще и картинки так динамически создавать?
0
 Аватар для Mikant
1322 / 995 / 127
Регистрация: 08.12.2009
Сообщений: 1,299
11.04.2011, 01:09
делай picturebox'ы например и ставь им свойство Image равным требуемой картинке из твоего класса. потом также как и лэйблы добавляй на пенель
0
7 / 7 / 3
Регистрация: 28.10.2010
Сообщений: 220
11.04.2011, 11:13
C#
1
2
3
4
5
6
for ( i = 0; i < list.Count; i++)
            {
                 XmlElement text = (XmlElement)doc.GetElementsByTagName("text")[i];
                    text_of_post = text.InnerText;
                    label[i].Text = text_of_post;
            }
Создаю лейблы, как в предыдущем примере by Mikant. Только вот в некоторых случаях, в xml между тегами <post> встречаеться многострочный текст. Как о можно перенести этот многострочный текст в лейблы? Или хотя бы подскажите, как эти переносы с xml можно заменить на лейбловские переносы \r\ ?
0
 Аватар для Mikant
1322 / 995 / 127
Регистрация: 08.12.2009
Сообщений: 1,299
11.04.2011, 12:01
C#
1
label1.Text = "Hello" + Environment.NewLine + "How are you?"; // в виндах этот NewLine равен \r\n
0
7 / 7 / 3
Регистрация: 28.10.2010
Сообщений: 220
11.04.2011, 12:07
Да эт немного не то. У меня уже есть текст, полученый с xml. И местами встречаються многострочные тексты с xml. в нем перенос организован добавлением управляющей последовательности символов. Вот мне и надо заменить эту последовательность на \r , к тому же получить количество таких вот замен в каждом случае, для того, чтоб внести поправку по игрику при инициализации следующего лейбла.
P.s. В оригинале xml файла на месте перносов стоит " &amp;lt;br&amp;gt; ".
0
 Аватар для Mikant
1322 / 995 / 127
Регистрация: 08.12.2009
Сообщений: 1,299
11.04.2011, 12:54
есть такой метод string.Replace([что], [на что]);

например так: string.Replace("&amp;lt;br&amp;gt;", Environment.NewLine); хотя уж как-то слишком подозрительно перенос выглядит... если там просто "\r", то всё еще проще. глянь кодировки
0
7 / 7 / 3
Регистрация: 28.10.2010
Сообщений: 220
12.04.2011, 10:52
та с заменой уже разобрался... но вот вылезла другая проблема- через регулярные выражения определил количество таких переносов, и пытаюсь внести поправку в y-координату следующего лейбла:
C#
1
2
3
4
5
6
7
8
9
// Тот же цикл
            int m1 = 0;
            Regex newReg = new Regex("\r");
             for ( i = 0; i < list.Count; i++)
            {
                    label[i].Location = new Point(3 , i*30+m1*30 );
                    MatchCollection matches = newReg.Matches(text_of_post);
                    m1 = matches.Count;
            }
Эффект какой-то, мягко говоря, кривой...

Добавлено через 3 минуты
P.s. Пока что этот вопрос можно отложить, поскольку решили, пока проэкт в начальной стадии, то перенести его на WPF. Кстати, кто-то может скинуть ссылку хоть на какой-то маломальский тутор по Microsoft Expression Blend 4?
0
5 / 5 / 4
Регистрация: 01.08.2012
Сообщений: 65
23.10.2012, 09:46
Цитата Сообщение от Mikant Посмотреть сообщение
прошу. метод ломовой.
Есть вопрос как можно размешать лейбелов виде таблицы
т.е например в tabPage1 создаем 20 дин.лейбел и их расположение должно выглядеть примерно так

label1 label2 label3 label4 label5
label6 label7 label8 label9 label10
label11 label12 label13 label14 label15

код
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Label[] labels = new Label[20];
            int x,y;
            int z = 0,j = 0;
            y = tabPage1.Width-50;
            
for (int i = 0; i < labels.Length; i++)
            {
                x = i * 50;
                if (x > y)
                {
                    l = j * 50; // Laction X
                    z = 25;     // Laction Y
                    j++; 
                    labels[i] = new Label() { Text = "label " + i.ToString(), Location = new Point(l, z), Size = new Size(50, 15) };
                }
                else 
                {
                    l1 = x; // Laction X
                    z = 5;  // Laction Y
                    labels[i] = new Label() { Text = "label " + i.ToString(), Location = new Point(l1, z), Size = new Size(50, 15) };
                }
как видите мой код не до конца обрабатывает все лайбели
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.10.2012, 09:46
Помогаю со студенческими работами здесь

Динамическое создание элементов
Доброго времени суток, форумчане! Есть такая проблемка: нужно динамически создавать новую форму, в ней 2 шт. dataGridView и 1 chart,...

Динамическое создание элементов управления
в общем, код написан верно (вроде как), проверял его изначально (добавлял компоненты, к ним код и прога работала), решил сделать через...

Динамическое создание элементов формы
Подскажите, пожалуйста вот этот код Label nbomb = new Label(); nbomb.Name = &quot;bomb&quot; + bcount; bcount++; nbomb.Top = 50 * sman.x;...

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

Динамическое создание и удаление элементов управления
В конструкторе есть комбобокс, нужно отображать n-ое кол-во textbox и label, в зависимости от значения combobox,дальше по коду ...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru