Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Динамическое создание контролов 
:(
    Опции темы
Kirk_Lee_Hammet
Дата 28.5.2014, 09:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 8.9.2006

Репутация: нет
Всего: нет



Здравствуйте, познания в С# на настоящее время не глубоки и не откажусь от любой помощи, извините если тема повторяется.
На форме создал панель с кнопками на ней. по нажатию кнопки динамически добавляю точно такую же панель с точно такими же кнопками. Реализовал вот так:

Код


 public partial class Form1 : Form
    {
        List<Button> but1 = new List<Button>();
        List<Panel> pnlist1 = new List<Panel>();
        List<Control> cntrlist = new List<Control>();
        int x = 1;
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            but1.Clear();
 
            for (int i=0; i < this.panel1.Controls.Count; i++)
            {
                if (this.panel1.Controls[i].Name.Contains("utton"))
                {
                    Button btt1 = new Button();
                    btt1.Name = "btt1" + this.panel1.Controls[i].Name + Convert.ToString(x);
                    btt1.Location = new Point(this.panel1.Controls[i].Left, this.panel1.Controls[i].Top);
                    btt1.Size = this.panel1.Controls[i].Size;
                    btt1.Text = this.panel1.Controls[i].Text;
                    but1.Add(btt1);
                }
            }
 
            Panel pnn1 = new Panel();
            pnn1.Name = "pnn1" + panel1.Name + Convert.ToString(x);
            pnn1.Height = panel1.Height;
            pnn1.Width = panel1.Width;
            pnn1.BorderStyle = BorderStyle.FixedSingle;
 
            if (x == 1)
            {
                int k = panel1.Top + panel1.Height + 10;
                pnn1.Location = new Point(panel1.Left, k);
                this.Controls.Add(pnn1);
                pnlist1.Add(pnn1);
            }
 
            if (x > 1)
            {
                int k = pnlist1[pnlist1.Count - 1].Top + pnlist1[pnlist1.Count - 1].Height + 10;
                pnn1.Location = new Point(panel1.Left, k);
                this.Controls.Add(pnn1);
                pnlist1.Add(pnn1);
            }
 
            for (int j = 0; j < but1.Count; j++)
            {
                pnn1.Controls.Add(but1[j]);
            }
 
            x++;
        }




Догадываюсь что это можно сделать проще и оптимальнее создав класс или классы, но знаний пока не хватает. Подскажите или я прав и как это можно сделать, если можно с примером.
PM MAIL   Вверх
infarch
Дата 26.6.2014, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 13.3.2009

Репутация: нет
Всего: 1



Не совсем понятна задача, зачем вообще это делается. Если нужно просто создать еще одну панель с кнопками, то почему бы не оформить ее как юзерконтрол? Первый экземпляр создаете и подписываетесь на события при старте приложения, все остальные - когда угодно.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0459 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.