InitializeComponent
设置表单上的组件,但是对于我创建的Usercontrol,它调用默认构造函数但我想在usercontrol上调用我自己的构造函数(带参数)。样板代码说不要编辑内容,那么最好的方法是什么?
答案 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
初始化组件非常强大,一旦你了解所有可扩展性点。 快乐的编码!