C# winform自定义控件在工具箱中显示和属性在属性面板中显示
2019-07-14 14:41
826 查看
在开发自定义控件件时,有好些Design属性是要使用的,如
ToolboxItem,
ToolboxBitmap,
Category,
Description等等,不知道这些属性其实也可以将控件搞出来,不过,知道了,会令事件更加简单,令控件更加专业和实用。有时,不知道用法,会令到项目的其他同事好烦,因为这个控件是你提供的。下面对一些常用的Design属性做一个简单的生产介绍。
1. ToolboxItem
有没有试过写一个用户控件后,想它不出现在工具箱中,当然有,有时候是控件的Designer部分没有写好或没写,有时候是控件一拖出来就报错,有时候是内部使用的控件,不想别人一引用DLL就出现控件。其它设置方法可以很简单。
[code]ToolboxItem(false)] public class MyPanel : UserControl { }
这样就可以了。“可恶”的用户控件就自动隐藏了,不出现在工具箱中。不过,如果你不知道这样的话,可以会引来一大堆的烦事。
2. ToolboxBitmap
写好一个用户控件后,在工具箱中出来的是一个蓝色的齿轮,这就不是很漂亮了,也不能够直观地表达自己的意图。如果更不幸的你的控件的名称好难认的话,其它的开发者会很麻烦的。怎样才能让用户控件在工具箱中显示不同的图标呢?
[code]ToolboxBitmap(typeof(System.Windows.Forms.Panel))] public class MyPanel : UserControl { }
这样就可以了,表示你所做的用户控件使用的图标是Panel的图标。
如果不想用系统的图标,要使用自己的图标,可以这样
[code][ToolboxBitmap(typeof(MyPanel), "WindowsApplication1.Images.MyPanel.bmp")] public class MyPanel : UserControl { }
不过,一定要注意路径,
WindowsApplication1.Images.MyPanel.bmp表示,解决方案是
WindowsApplication1,目录是
Images,文件名是
MyPanel.bmp,同时,这个图片必须是“嵌入的资源”(点击文件,右键,属性,有一个文件属性,其中,在生成操作中,可以选择
"嵌入的资源")
3. Category与Description
[code][Category("Appearance"), Description("阴影色")] public System.Drawing.Color ShadowColor { get { …} set { …} }
这两个是经常都会写在一起的属性,
Category表示类型,如属性框中所显示的外观,布局等,当然,你可以自己写一个,叫“自定义属性”,而
Description就是这个属性的描述,用来说明属性有什么用途。这两个的设置相对都比较简单,可以说,一看就知道,不过提一下,
Appearance是特殊的词,在属性面板中,它就是外观一栏。
4. DefaultValue
[code][DefaultValue(typeof(Color), "DarkGray")] public System.Drawing.Color ShadowColor { get { …} set { …} }
用于设置默认的值,对于string,bool,int,可以直接写出来,如
[DefaultValue(10)],这是可以的,不过,不是这三种类型的话,就比较麻烦,一定要先转化为
string才能设置成功。如上面的
DarkGray,这是系统定义的颜色,这还是比较好处理的。不过,如果是一些自定义的颜色,如颜色是128,0,128,你应该将128转为16进制,写成0x800080,前缀0x是一定要加的。最后就这样
[DefaultValue(typeof(Color), "0x800080")]
5. Browsable
[code] public partial class MyTextBox : TextBox { public MyTextBox() { var s = DefaultText; InitializeComponent(); } [Browsable(true)] public string DefaultText {get;set;} }
表示,将在属性面板中显示这个属性。
如果设置为false,将不会显示(但是仍然会在对应的*.Designer.cs中进行序列化),如:
[code]this.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;
6. DesignerSerializationVisibility
表示,是否在*.Designer.cs文件中将设置的代码写出来,也就是是否要实现序列化。默认为
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]表示需要实现序列化。
如果设置为hidden:
[code] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public List<Person> Persons { get; set; }
将不会被序列化:
如果自定义控件中有些属性不需要显示在属性面板或者不需要序列化时,建议hidden掉。
相关文章推荐
- winform 自定义控件属性在属性面板中显示的问题
- winform 自定义控件属性在属性面板中显示的问题
- winform 自定义控件属性在属性面板中显示的问题
- C#自定义控件自动显示在工具箱
- c# winForm 将窗体状态栏StatusStrip 分成左中右三部分 右边显示当前时间,右边显示注意设置spring属性为true
- c# winform pictureBox显示图片,PictureBox控件的Image属性
- c# usercontrol 用户自定义控件无法显示在工具箱的解决办法
- c# winform pictureBox显示图片,PictureBox控件的Image属性
- c#创建自定义控件在winform上添加该控件属性为空白
- 控制.NET自定义控件的属性是否显示在属性面板
- 为什么我的自定义控件不能正确地显示在工具箱中?
- C# WinForm 设置窗体在桌面区域全屏显示
- C#中的WinForm调用控制台进行信息显示
- C#中使用Property Grid(属性面板)控件
- 【C#】妈妈再也不用担心自定义控件如何给特殊类型的属性添加默认值了,附自定义GroupBox一枚
- C#中使用反射显示程序集的所有类型和属性(转贴)
- C#winform设置textbox属性不可编辑
- C#--WinForm修改模块--显示修改学员信息
- 【转】c# WinForm开发 DataGridView控件的各种操作总结(单元格操作,属性设置)
- C#在Winform程序中显示QQ在线状态