如何为InitializeComponent提供自定义代码?

时间:2009-10-14 12:56:51

标签: c# winforms user-controls designer 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
    });
}

表单设计者如何知道应该为每个列调用构造函数,然后调用ListView的Columns属性的AddRange方法?我需要这个像我正在写的UserControl这样的ListView。

2 个答案:

答案 0 :(得分:6)

我想要实现的是自定义我的自定义组件生成的InitializeComponent代码。我发现这篇MSDN文章描述了如何做到这一点:

Customizing Code Generation in the .NET Framework Visual Designers

似乎我需要为我的组件编写CodeDomSerializer,并生成一个CodeExpression的集合来描述我的自定义初始化代码。

答案 1 :(得分:2)

您可以使用特殊属性告诉Visual Studio设计器如何在代码中序列化属性。有关示例,请参阅DesignerSerializationVisibilityAttribute的MSDN参考。 This series of articles还概述了可用于扩展自定义控件的设计时支持的各种属性。希望这会有所帮助。