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

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

14.01.2010, 20:00. Показов 56569. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru