Да, это должно работать, я построил нечто подобное для генерации диалогов динамического поиска на основе сущностей.
Пользовательские атрибуты могут определять свойства, которые должны отображаться в форме. Затем форма может генерировать элементы управления для этих свойств и использовать привязку данных, чтобы связать элемент управления со свойством объекта.
TableLayoutPanel может помочь с макетом сгенерированных элементов управления. Один столбец может хранить объекты меток, а второй - элемент управления (текстовое поле и т. Д.). Или несколько наборов, если вы хотите больше столбцов.
Работа с атрибутами
Поскольку у вас есть тип, вы можете искать в каждом свойстве свои специальные атрибуты:
foreach (var property in searchObjectType.GetProperties())
{
var labelAttrib = (FieldLabelAttribute)property.GetCustomAttributes(typeof(FieldLabelAttribute), false).FirstOrDefault();
var typeAttrib = (FieldTypeAttribute)property.GetCustomAttributes(typeof(FieldTypeAttribute), false).FirstOrDefault();
}
Панель стола:
Как только вы узнаете, что вам нужно создать элемент управления, выясните, какой тип элемента управления вы собираетесь создать: (Предполагается, что у вас есть атрибут со свойством Order, чтобы вы знали, «где» разместить элемент управления в сетке. Этот пример основан на пяти столбцах (метка, элемент управления, разделитель, метка, элемент управления):
if (type == typeof(string))
{
generatedControl = new Textbox();
generatedControl.DataBindings.Add("Text", myObject, property.Name);
}
А затем добавьте элемент управления в таблицу (предполагается, что вы создали элемент управления меткой):
pnlLayout.Controls.Add(label, (myAttrib.Order % 2 * 3), myAttrib.Order / 2);
pnlLayout.Controls.Add(generatedControl, (myAttrib.Order % 2 * 3) + 1, myAttrib.Order / 2);