将构造函数参数传递给在InitializeComponent中创建的控件

时间:2012-09-23 22:08:38

标签: c# .net winforms initializecomponent

InitializeComponent设置表单上的组件,但是对于我创建的Usercontrol,它调用默认构造函数但我想在usercontrol上调用我自己的构造函数(带参数)。样板代码说不要编辑内容,那么最好的方法是什么?

1 个答案:

答案 0 :(得分:4)

您需要创建一个TypeConverter类,并使用TypeConverterAttribute(typeof(MyTypeConverter))修饰UserControl。类型转换器将告诉Visual Studio如何创建类型 - 允许您控制在InitializeComponent中放置的内容。 你可以真正深入,并实际编写一个自定义CodeDomSerializer,然后你可以写出你想要的任何C#代码 - 我使用这种技术强制InitializeComponent方法解决Castle Windsor的所有Forms控件!这很有效......

总之...

你会注意到MS已经将这种技术用于这样的类型:

this.treeView1 = new System.Windows.Forms.TreeView();
this.treeView1.Location = new System.Drawing.Point(72, 104);
this.treeView1.Name = "treeView1";
this.treeView1.Nodes.AddRange(
new System.Windows.Forms.TreeNode[] {
  new System.Windows.Forms.TreeNode("Node0"),
  new System.Windows.Forms.TreeNode("Node1")});

基本上 - 在你的TypeConverter中,你重写'ConverterTo'方法,并返回一个新的InstanceDescriptor,它将向WinForms设计器描述,如何实例化你的类型(使用什么构造函数,以及传递什么参数)。 / p>

您可以在此处找到更多信息(包括基本实施): http://msdn.microsoft.com/en-us/library/ms973818.aspx

初始化组件非常强大,一旦你了解所有可扩展性点。 快乐的编码!