На этой картинке при нажатии на кнопку "Добавить" у нас копируется groupBox на позицию (91; 177)
На этой картинке при нажатии на кнопку "Добавить" у нас копируется 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);
}
}
}