Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > Динамическое создание контролов


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

Код


 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++;
        }




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

Автор: infarch 26.6.2014, 12:05
Не совсем понятна задача, зачем вообще это делается. Если нужно просто создать еще одну панель с кнопками, то почему бы не оформить ее как юзерконтрол? Первый экземпляр создаете и подписываетесь на события при старте приложения, все остальные - когда угодно.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)