views:

439

answers:

2

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.

+1  A: 

You can use special attributes to tell the Visual Studio designer how to serialize properties in code. See the MSDN reference for DesignerSerializationVisibilityAttribute for an example. This series of articles also gives a good overview of the various attributes available to extend design time support for custom controls. Hope this helps.

tbreffni
Thanks for taking the time to answer, what I need is more than what automatic serialization can provide. I found a MSDN article today described in my post below.
Ozgur Ozcitak
+1  A: 

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.

Ozgur Ozcitak