Search code examples
c#winformsuser-controlsdesignerinitializecomponent

How to provide custom code for InitializeComponent?


When you modify column headers of a ListView at design time, the designer generates code to serialize column headers at run-time:

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
    });
}

How does the forms-designer know that it should call the constructor for each column followed by a call to the AddRange method of the Columns property of the ListView? I need this for a ListView like UserControl I am writing.


Solution

  • What I wanted to achieve was to customize the InitializeComponent code produced by my custom component. I found this MSDN article which describes how to do that:

    Customizing Code Generation in the .NET Framework Visual Designers

    It appears that I need to write a CodeDomSerializer for my component, and generate a collection of CodeExpression's describing my custom initialization code.