【C#】winform ⾃定义控件在⼯具箱中显⽰和属性在属性⾯板中显⽰在开发⾃定义控件件时,有好些Design属性是要使⽤的,如ToolboxItem , ToolboxBitmap , Category , Description 等等,不知道这些属性其实也可以将控件搞出来,不过,知道了,会令事件更加简单,令控件更加专业和实⽤。有时,不知道⽤法,会令到项⽬的其他同事好烦,因为这个控件是你提供的。下⾯对⼀些常⽤的Design属性做⼀个简单的⽣产介绍。
1. ToolboxItem
有没有试过写⼀个⽤户控件后,想它不出现在⼯具箱中,当然有,有时候是控件的Designer部分没有写好或没写,有时候是控件⼀拖出来就报错,有时候是内部使⽤的控件,不想别⼈⼀引⽤DLL就出现控件。其它设置⽅法可以很简单。
这样就可以了。“可恶”的⽤户控件就⾃动隐藏了,不出现在⼯具箱中。不过,如果你不知道这样的话,可以会引来⼀⼤堆的烦事。
2. ToolboxBitmap
写好⼀个⽤户控件后,在⼯具箱中出来的是⼀个蓝⾊的齿轮,这就不是很漂亮了,也不能够直观地表达⾃⼰的意图。如果更不幸的你的控件的名称好难认的话,其它的开发者会很⿇烦的。怎样才能让⽤户控件在⼯具箱中显⽰不同的图标呢?
这样就可以了,表⽰你所做的⽤户控件使⽤的图标是Panel的图标。
如果不想⽤系统的图标,要使⽤⾃⼰的图标,可以这样不过,⼀定要注意路径,WindowsApplication1.Images.MyPanel.bmp 表⽰,解决⽅案是WindowsApplication1,⽬录是Images ,⽂件名是MyPanel.bmp ,同时,这个图⽚必须是“嵌⼊的资源”(点击⽂件,右键,属性,有⼀个⽂件属性,其中,在⽣成操作中,可以选择"嵌⼊的资源")
3. Category 与Description 这两个是经常都会写在⼀起的属性,Category 表⽰类型,如属性框中所显⽰的外观,布局等,当然,你可以⾃⼰写⼀个,叫“⾃定义属性”,⽽Description 就是这个属性的描述,⽤来说明属性有什么⽤途。这两个的设置相对都⽐较简单,可以说,⼀看就知道,不过提⼀下,Appearance 是特殊的词,在属性⾯板中,它就是外观⼀栏。
4. DefaultValue ⽤于设置默认的值,对于string,bool,int,可以直接写出来,如[DefaultValue(10)],这是可以的,不过,不是这三种类型的话,就⽐较⿇烦,⼀定要先转化为string 才能设置成功。如上⾯的DarkGray ,这是系统定义的颜⾊,这还是⽐较好处理的。不过,如果是⼀些⾃定义的颜⾊,如颜⾊是128,0,128,你应该将128转为16进制,写成0x800080,前缀0x是⼀定要加的。最后就这样
[DefaultValue(typeof(Color), "0x800080")]
5. Browsable ToolboxItem (false )]public class MyPanel : UserControl {}
1
2
3
4ToolboxBitmap (typeof (System .Windows .Forms .Panel ))]public class MyPanel : UserControl {}
1
2
34[ToolboxBitmap (typeof (MyPanel ), "WindowsApplication1.Images.MyPanel.bmp")]public class MyPanel : UserControl {}
1
2
3
4[Category ("Appearance"), Description ("阴影⾊")]public System .Drawing .Color ShadowColor { get { …} set { …} }
12[DefaultValue (typeof (Color ), "DarkGray")]public System .Drawing .Color ShadowColor { get { …} set { …} }
1
2
表⽰,将在属性⾯板中显⽰这个属性。
如果设置为false,将不会显⽰(但是仍然会在对应的*.Designer.cs中进⾏序列化),如:
6. DesignerSerializationVisibility 表⽰,是否在*.Designer.cs⽂件中将设置的代码写出来,也就是是否要实现序列化。默认为
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]表⽰需要实现序列化。如果设置为hidden:
将不会被序列化:
如果⾃定义控件中有些属性不需要显⽰在属性⾯板或者不需要序列化时,建议hidden掉。参考: public partial class MyTextBox : TextBox { public MyTextBox () { var s = DefaultText ; InitializeComponent (); } [Browsable (true )] public string DefaultTe
xt {get ;set ;} }
1
2
3
4
tool工具箱5
6
7
8
9
10
11this .myTextBox1.DefaultText = null ;//仍然会序列化this .myTextBox1.Location = new System .Drawing .Point (476, 151);this .myTextBox1.Name = "myTextBox1";this .myTextBox1.Size = new System .Drawing .Size (100, 21);this .myTextBox1.TabIndex = 0;
1
2
3
4
5 [DesignerSerializationVisibility (DesignerSerializationVisibility .Hidden )] public List <Person > Persons { get ; set ; }
1
2
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论