c# - 有没有办法从通用对象列表中获取特定对象
问题描述
我想用继承自抽象用户控件的用户控件填充面板。他们唯一的共同超类是控制。
填充 BaseShape 和 BaseFractal 的代码是一种通用方法,它要求使用控件列表自行填充。我想在面板旁边的字段上创建一个对象,该对象具有他们在预览中单击的类型以及用户控件属性的属性。我不能调用这些属性,因为 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);
}
解决方案
推荐阅读
- android - 将按钮放在 AppBarOverlay 的右上角
- python - 在 Heroku 上使用 Telegram Bot 发送图像时出错
- python - PyGame 不绘制 X
- unit-testing - 如何仅将 pact-jvm 提供程序与 json 文件集成
- php - 将 HTML 表单提交到 .txt 文件,但是如何让新帖子出现在顶部,而不是底部?
- python - 根据单词将列表过滤成更小的列表
- android - 无法创建任务“:app:injectCrashlyticsMappingFileIdDebug”
- mysql - 加快加入字符串字段
- mysql - mySql - 在分组条件下进行选择
- python - Apache 没有正确地为我的 Django 项目模板提供服务