Как предоставить настраиваемый код для InitializeComponent?

Когда вы изменяете заголовки столбцов ListView во время разработки, разработчик генерирует код для сериализации заголовков столбцов во время выполнения:

private void InitializeComponent()
{
    this.listView1 = new System.Windows.Forms.ListView();
    this.columnHeader1 = new System.Windows.Forms.ColumnHeader();
    this.columnHeader2 = new System.Windows.Forms.ColumnHeader();
    this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
        this.columnHeader1,
        this.columnHeader2
    });
}

Как разработчик форм знает, что он должен вызывать конструктор для каждого столбца, за которым следует вызов метода AddRange свойства Columns ListView? Мне нужно это для ListView, как UserControl, который я пишу.

Ответ 1

То, что я хотел достичь, - это настроить код InitializeComponent, созданный моим настраиваемым компонентом. Я нашел эту статью MSDN, которая описывает, как это сделать:

Настройка генерации кода в Visual Designers.NET Framework

Похоже, мне нужно написать CodeDomSerializer для моего компонента и создать коллекцию CodeExpression, описывающий мой пользовательский код инициализации.

Ответ 2

Вы можете использовать специальные атрибуты, чтобы сообщить дизайнеру Visual Studio, как сериализовать свойства в коде. См. Ссылку MSDN для DesignerSerializationVisibilityAttribute для примера. Эта серия статей также дает хороший обзор различных атрибутов, доступных для продления времени разработки для пользовательских элементов управления. Надеюсь, это поможет.