C# 如何使VisualStudio中的设计器使用参数化构造函数生成组件

C# 如何使VisualStudio中的设计器使用参数化构造函数生成组件,c#,winforms,visual-studio-2012,C#,Winforms,Visual Studio 2012,如何使VisualStudio使用带参数的构造函数生成代码 例如: 添加ContextMenuStrip时,这行代码在MyForm.designer.cs中生成InitializeComponent() this.MyMenuStrip= new System.Windows.Forms.ContextMenuStrip(this.components); 使用dotPeek来反映ContextMenuStrip并没有为我提供任何有用的方法 我想创建一个自定义控件,当它被放到任何System.

如何使VisualStudio使用带参数的构造函数生成代码

例如:

添加ContextMenuStrip时,这行代码在MyForm.designer.cs中生成InitializeComponent()

this.MyMenuStrip= new System.Windows.Forms.ContextMenuStrip(this.components);
使用dotPeek来反映ContextMenuStrip并没有为我提供任何有用的方法

我想创建一个自定义控件,当它被放到任何System.Windows.Forms.control中时,设计器将调用参数构造函数,而不是无参数构造函数。

从中可以看出,具有以IContainer作为参数的构造函数的组件是一种特殊情况:

组件可以让设计者知道它希望 当其容器通过实现公共 构造函数,该构造函数接受IContainer类型的单个参数,如图所示 在此片段中:

请注意,构造函数使用容器将自身添加为 容器组件。在该构造器在场的情况下,设计师 将生成使用此构造函数的代码,并将其传递给容器 用于将其自身添加到的组件


另外,请参见MSDN上的。

它如何知道传递参数的内容?这是一个好问题。那么它如何知道应该在ContextMenuStrip中传递this.components呢?使用参数化constructor@Steve你的指导真的很有帮助。你应该做一个答案,这样我就可以把它标记为答案。非常感谢。你能把这个链接添加到你的答案中吗?这会对其他人很有帮助。谢谢。没问题,在复制我发布的链接之前,我添加了这个并删除了上面的评论!哎呀。。。
class ClockComponent : Component {
    public ClockComponent(IContainer container) { 
        // Add object to container's list so that 
        // we get notified when the container goes away container.Add(this); 
    } 
    // ...
}