@ArtemSh51

Как копировать элемент gropBox при нажатии на кнопку и при помощи кода. Копировать нужно в опреднленную позицию?

641729c8aff44310630268.png
На этой картинке при нажатии на кнопку "Добавить" у нас копируется groupBox на позицию (91; 177)

64172a79a13dc328627711.png
На этой картинке при нажатии на кнопку "Добавить" у нас копируется groupBox на позицию (91; 284). Между 2-ой groupBox и 3-ий groupBox у нас расстояние по Y = 107. При этом если мы нажмем на кнопку "Добавить" еще раз, то мы добавим 4-ую groupBox на координату (91, 391). И нажимать на кнопку можно сколько угодно раз, но при этом у нас копируются groupBox.

using System;
using System.Drawing;
using System.Linq;
using System.Reflection;
using System.Windows.Forms;


namespace TestProgram
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private object CloneObject(object o)
        {
            Type t = o.GetType();
            PropertyInfo[] properties = t.GetProperties();


            Object p = t.InvokeMember("", System.Reflection.
                BindingFlags.CreateInstance, null, o, null);


            foreach (PropertyInfo pi in properties)
            {
                if (pi.CanWrite)
                {
                    pi.SetValue(p, pi.GetValue(o, null), null);
                }
            }
            return p;
        }
        private void button2_Click(object sender, EventArgs e)
        {
            int offsetY = 5;
            int x = 91;
            int y = 71;
            int index = 1;
            foreach (GroupBox oldB in Controls.OfType<GroupBox>())
            {
                x = oldB.Location.X;
                y = Math.Max(y, oldB.Location.Y + oldB.Height);
                index++;
            }

            GroupBox groupBox = (GroupBox)CloneObject(groupBox1);
            groupBox.Name = "Группа1 " + index;
            groupBox1.Location = new Point(x, y + offsetY);
            groupBox.Text = "Группа " + index.ToString();
            Controls.Add(groupBox);
        }
    }
}
  • Вопрос задан
  • 89 просмотров
Решения вопроса 1
yarosroman
@yarosroman Куратор тега C#
C# the best
Зачем клонировать? Сделайте свой UserControl, и при клике добавляйте его.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы