【问题标题】:How to provide custom code for InitializeComponent?如何为 InitializeComponent 提供自定义代码?
【发布时间】:2010-12-06 16:02:40
【问题描述】:

当您在设计时修改 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,我需要这个。

【问题讨论】:

    标签: c# winforms user-controls designer initializecomponent


    【解决方案1】:

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

    【讨论】:

    • 感谢您花时间回答,我需要的不仅仅是自动序列化所能提供的。我今天在下面的帖子中找到了一篇 MSDN 文章。
    【解决方案2】:

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

    Customizing Code Generation in the .NET Framework Visual Designers

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

    【讨论】:

      猜你喜欢
      • 2018-12-26
      • 1970-01-01
      • 2012-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-06
      相关资源
      最近更新 更多