Я хочу заполнить панель пользовательскими элементами управления, которые наследуются от абстрактного пользовательского элемента управления.Единственный распространенный суперкласс - контроль.
Код для заполнения BaseShape и BaseFractal - это универсальный метод, который запрашивает список элементов управления для самостоятельного заполнения.Я хочу создать объект в поле рядом с панелью с типом, который они щелкнули в окне предварительного просмотра со свойствами свойств usercontrol.Я не могу вызвать свойства, потому что BaseShape и BaseFractal не имеют их общих.Я думал о создании суперкласса со всеми этими свойствами, чтобы я мог изменить их и игнорировать свойства, которые я не хочу менять.Есть ли другой способ сделать это помимо идеи создания суперкласса со всеми свойствами в них?
private void PopulatePanel(List<Control> controls, Panel panel, int controlsPerRow = 3)
{
if (Utility.Utility.IsNullOrDefault(controls) || Utility.Utility.IsNullOrDefault(panel) || controlsPerRow <= 0) return;
panel.Controls.Clear();
int widthBetweenControls = (int)(panel.Width * 0.05);
int heightBetweenControls = (int)(panel.Height * 0.05);
int heighthBetweenSideControl = (int)(panel.Height * 0.1);
int widthBetweenSideControl = (int)(panel.Width * 0.1);
int yCoord = heighthBetweenSideControl;
int widthControl = (int)((panel.Width - 2 * widthBetweenSideControl - widthBetweenControls * (controlsPerRow - 1)) / controlsPerRow);
int heightControl = (int)((panel.Height - 2 * heighthBetweenSideControl - heightBetweenControls * (controlsPerRow - 1)) / (controlsPerRow-1));
for (int i = 0; i <= controls.Count / controlsPerRow; i++)
{
int xCoord = widthBetweenSideControl;
for (int j = 0; j < controlsPerRow; j++)
{
if (j + (i * controlsPerRow) == controls.Count) return;
Control c = controls.ElementAt(j + (i * controlsPerRow));
c.Width = widthControl;
c.Height = heightControl;
c.Location = new Point(xCoord, yCoord);
panel.Controls.Add(c);
xCoord += (j == controlsPerRow) ? (widthBetweenSideControl) : (widthBetweenControls + widthControl);
}
yCoord += (i >= controls.Count / controlsPerRow) ? (heighthBetweenSideControl) : (heightBetweenControls + heightControl);
}
}
private void ShapeButon_Click(object sender, EventArgs e)
{
List<Control> controls = new List<Control>();
foreach(Shape t in Enum.GetValues(typeof(Shape)))
{
BaseShape bs = ShapeFactory.CreateInstance(t);
controls.Add(ShapeFactory.CreateInstance(t));
}
PopulatePanel(controls, selectPanel, 3);
}