Мне нужно автоматизировать создание и настройку нескольких элементов управления в форме в режиме разработки.Автоматизация создания управления в дизайне окон.
Для этого я создаю элемент управления, который взаимодействует и изменяет некоторые другие элементы управления в форме и устанавливает значения по умолчанию, добавляет столбцы в сетки ... После этого я удаляю элемент управления и все.
Это не совсем сложная техника для создания специальных макросов, но она работает как очарование, чтобы облегчить повторяющиеся свойства настройки работы, особенно с «большими» объектами с большим количеством элементов, таких как сетки.
Проблема в том, что я не могу создавать новые элементы управления и динамически добавлять их в форму в режиме разработки. Рассмотрим следующий код (только упрощенный пример):
public partial class ButtonCreator : UserControl
[Category("Automation")]
public int LeftPosition { get; set; }
[Category("Automation")]
public bool AutoCreate
{
get { return false; }
set
{
var form = FindForm();
if (value)
{
for (var i = 10; i < 100; i = i + 20)
{
var button = new Button(){Name = "btn_" + DateTime.Now.Ticks + "_" + i};
form.Controls.Add(button);
button.Location = new Point(LeftPosition, i);
button.BringToFront();
}
}
}
}
(я также попытался использовать конструктор компонента с аналогичным кодом, но с тем же результатом, так что этот способ гораздо менее многословным)
Чтобы использовать это, я добавляю экземпляр ButtonCreator в форму, тогда я устанавливаю свойство AutoCreate (в режиме проектирования, из списка свойств). По-видимому, он работает и добавляет кнопки в форму, но они не сериализованы для автогенерированного кода на C#, и я теряю их после сохранения.
Есть ли что-то, что я могу сделать, чтобы заставить их сериализоваться, когда Visual Studio генерирует файл designer.cs?
Рассмотрите это ограничение: это не код, который будет выпущен, просто грязный код для облегчения разработки, поэтому я предпочитаю избегать более сложных методов, чтобы иметь возможность легко вводить изменения, прямо во время кодирования. Следует избегать ссылок на автоматизацию Visual Studio или создавать визуальные расширения студии, если это возможно.
Дизайнер знает фасоль об этих добавленных пуговицах. Вы не можете выбрать их, и вы не сможете их сериализовать. Это должен сделать дизайнер, он должен вызывать IDesignerHost.CreateComponent(). См. Например, System.Windows.Forms.Design.TabControlDesigner.OnAdd(), код, который добавляет две TabPages в TabControl, когда вы отбрасываете его в форме. –
Вы можете найти мой ответ [здесь, о добавлении элементов управления программным способом во время разработки] (http://stackoverflow.com/a/33535154/3110834). –
Я думаю, что вы должны поместить логику в конструктор «Базовая форма» или создать свою форму с помощью шаблона 't4'. –