C# 如何使VisualStudio中的设计器使用参数化构造函数生成组件
如何使VisualStudio使用带参数的构造函数生成代码 例如: 添加ContextMenuStrip时,这行代码在MyForm.designer.cs中生成InitializeComponent()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.
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);
}
// ...
}