Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.

like image 954
Ozgur Ozcitak Avatar asked Oct 14 '09 12:10

Ozgur Ozcitak


2 Answers

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.

like image 93
tbreffni Avatar answered Nov 13 '22 16:11

tbreffni


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.

like image 34
Ozgur Ozcitak Avatar answered Nov 13 '22 16:11

Ozgur Ozcitak