.Net自定义控件之ToolboxBitmap元数据的设置
2009-04-26 12:33
190 查看
写.Net自定义控件有一段时间了,一日突然发现工具箱里的那个蓝色齿轮图标越看越不爽。怎么办?换!
于是查了一下MSDN按照它的做法试了N次都行不通。
百度、Google 也查了,但是不知道是网上的那些个解决办法没有被写清楚,还是我的理解能力的问题。
这个问题还是没解决。因为有新的任务下来,这个问题一直被悬着没解决,最近因为项目的原因需要自己开发特定功能的控件。
该是解决这个问题的时候了。研究了一个早上总于搞定了。现在把我得到的结论写在这里,希望对大家有所帮助。
不啰嗦了,进入正题。
首先,选择一张大小为16*16的bmp位图,尺寸超过16*16会被缩放。
而且也不仅仅只是支持bmp的图片,至于究竟支持那些格式的图片,有兴趣的朋友可以去研究下。
注意:位图的左下角的颜色将被设置为透明色。
准备:解决方案:Widgets
项目名称:Widgets.Windows
控件名称:Expander
两个Visual Studio 2008实例:一个用于打开解决方案Widgets,另一个打开解决方案Testing
补充:因为Widgets.Windows是Windows窗体应用程序的控件库,所以解决方案Testing中建立的项目也必须是Windows窗体应用程序。
ToolboxBitmap有三个重载,依次展开就很容易把问题解释清楚了。
重载一:
重载三 Expander元数据
/// <summary>
/// 表示一个可显示标题的控件,该标题具有一个用于显示内容的可折叠窗口。
/// </summary>
[ToolboxItem(true)]
[Designer(typeof(Designer))]
[DefaultProperty("Text"), DefaultEvent("Click")]
[ToolboxBitmap(typeof(Expander), "Resources.Icon.Expander.bmp")]
[Description("表示一个可显示标题的控件,该标题具有一个用于显示内容的可折叠窗口。")]
public partial class Expander : Control
{
...
}
编译Widgets.Windows项目,再次用Reflector看一下它生成后的文件结构:
这次我们可以看到,Expander.bmp编译后的的不但被加上了默认命名空间名称,还加上了该图片的文件夹的名字。
但是我的元数据中并没有写上它被编译出来的全称"Widgets.Windows.Resources.Icon.Expander.bmp",而是"Resources.Icon.Expander.bmp"
也就是说我把默认命名空间去掉了,不要怀疑,把编译后的Widgets.Windows.dll文件拖到 Testing 的工具箱里,是可以看到预期的图标的。
这里也不截图了,原因我不说你也知道,呵呵!
之前看过一篇文章,说什么要把元数据设置为“解决方案名称+项目名称+图片文件夹名称+文件名”。
那时候还在摸索阶段,所以按他的方法试了又试却始终达不到想要的效果。后来认真一想,解决方案只是拿来管理项目的,关项目里的类什么事?
所以把解决方案名称去掉了,但还是没有用。然后想起第二种重载:当图片在项目的根目录下时,是不需要设置图片名称的,
难道项目名称也是不需要的?所以索性就把项目名称也去掉了。终于达到了想要的效果了!
再说了“解决方案名称+项目名称+图片文件夹名称+文件名”这种说法是不够正确的,项目名称只是项目名称,正真编译出来图片加上的前缀
既不是程序集的名称也不是项目名称,而是是默认命名空间名称。除非你的项目名称和你这个项目的默认命名空间名称相同,这种说法才成立!
我能达到效果的原因只不过是我的习惯是项目名称、程序集名称、默认命名空间名称三者通常设为一样的罢了。
总结:
个人是比较喜欢重载三的,原因有以下三点:
一、比较灵活,图片的名称不一定要与控件类的名称相同,虽然说相同比较好一些;
二、稳定。不像重载一那样需要去硬盘上找图片,我是把我的移动硬盘指定为Z:盘,难道当我把这个控件发布出去时,
也一定要让使用者在Ta的Z:盘放一张图片吗?
三、资源统一管理。第二种重载虽然方便、简洁,但它有着太多的限制,图片的文件名必须与控件类名一致、图片必须位于项目的根目录下,
这样一来当同一个项目中控件达到一定的数量时,势必会为文件的管理带来不便。
就一个ToolboxBitmap元数据的设置就花了这么大的篇幅来解释,希望高手们不要嫌我啰嗦哦,
我只是想把问题解释得更清楚,为需要帮助的人,提供一点点信息而已。
今天(2009年5月20日)抽空写了一个简单的例子
http://files.cnblogs.com/zys529/ToolboxIcon.rar
MD5:FB9897A8A49A677715C2080447BE5572
希望对大家有所帮助。
原文地址:/article/5403873.html
近期发现有些朋友转载了这篇日志,
但大部分转载过去后代码格式发生了紊乱,图片也不能正常显示。
为了不影响读者的阅读和学习,请转载的朋友把本文的链接地址一并加上,谢谢!!!
当然,这一段废话就不用加上去了^_^
于是查了一下MSDN按照它的做法试了N次都行不通。
百度、Google 也查了,但是不知道是网上的那些个解决办法没有被写清楚,还是我的理解能力的问题。
这个问题还是没解决。因为有新的任务下来,这个问题一直被悬着没解决,最近因为项目的原因需要自己开发特定功能的控件。
该是解决这个问题的时候了。研究了一个早上总于搞定了。现在把我得到的结论写在这里,希望对大家有所帮助。
不啰嗦了,进入正题。
首先,选择一张大小为16*16的bmp位图,尺寸超过16*16会被缩放。
而且也不仅仅只是支持bmp的图片,至于究竟支持那些格式的图片,有兴趣的朋友可以去研究下。
注意:位图的左下角的颜色将被设置为透明色。
准备:解决方案:Widgets
项目名称:Widgets.Windows
控件名称:Expander
两个Visual Studio 2008实例:一个用于打开解决方案Widgets,另一个打开解决方案Testing
补充:因为Widgets.Windows是Windows窗体应用程序的控件库,所以解决方案Testing中建立的项目也必须是Windows窗体应用程序。
ToolboxBitmap有三个重载,依次展开就很容易把问题解释清楚了。
重载一:
重载三 Expander元数据
/// <summary>
/// 表示一个可显示标题的控件,该标题具有一个用于显示内容的可折叠窗口。
/// </summary>
[ToolboxItem(true)]
[Designer(typeof(Designer))]
[DefaultProperty("Text"), DefaultEvent("Click")]
[ToolboxBitmap(typeof(Expander), "Resources.Icon.Expander.bmp")]
[Description("表示一个可显示标题的控件,该标题具有一个用于显示内容的可折叠窗口。")]
public partial class Expander : Control
{
...
}
编译Widgets.Windows项目,再次用Reflector看一下它生成后的文件结构:
这次我们可以看到,Expander.bmp编译后的的不但被加上了默认命名空间名称,还加上了该图片的文件夹的名字。
但是我的元数据中并没有写上它被编译出来的全称"Widgets.Windows.Resources.Icon.Expander.bmp",而是"Resources.Icon.Expander.bmp"
也就是说我把默认命名空间去掉了,不要怀疑,把编译后的Widgets.Windows.dll文件拖到 Testing 的工具箱里,是可以看到预期的图标的。
这里也不截图了,原因我不说你也知道,呵呵!
之前看过一篇文章,说什么要把元数据设置为“解决方案名称+项目名称+图片文件夹名称+文件名”。
那时候还在摸索阶段,所以按他的方法试了又试却始终达不到想要的效果。后来认真一想,解决方案只是拿来管理项目的,关项目里的类什么事?
所以把解决方案名称去掉了,但还是没有用。然后想起第二种重载:当图片在项目的根目录下时,是不需要设置图片名称的,
难道项目名称也是不需要的?所以索性就把项目名称也去掉了。终于达到了想要的效果了!
再说了“解决方案名称+项目名称+图片文件夹名称+文件名”这种说法是不够正确的,项目名称只是项目名称,正真编译出来图片加上的前缀
既不是程序集的名称也不是项目名称,而是是默认命名空间名称。除非你的项目名称和你这个项目的默认命名空间名称相同,这种说法才成立!
我能达到效果的原因只不过是我的习惯是项目名称、程序集名称、默认命名空间名称三者通常设为一样的罢了。
总结:
个人是比较喜欢重载三的,原因有以下三点:
一、比较灵活,图片的名称不一定要与控件类的名称相同,虽然说相同比较好一些;
二、稳定。不像重载一那样需要去硬盘上找图片,我是把我的移动硬盘指定为Z:盘,难道当我把这个控件发布出去时,
也一定要让使用者在Ta的Z:盘放一张图片吗?
三、资源统一管理。第二种重载虽然方便、简洁,但它有着太多的限制,图片的文件名必须与控件类名一致、图片必须位于项目的根目录下,
这样一来当同一个项目中控件达到一定的数量时,势必会为文件的管理带来不便。
就一个ToolboxBitmap元数据的设置就花了这么大的篇幅来解释,希望高手们不要嫌我啰嗦哦,
我只是想把问题解释得更清楚,为需要帮助的人,提供一点点信息而已。
今天(2009年5月20日)抽空写了一个简单的例子
http://files.cnblogs.com/zys529/ToolboxIcon.rar
MD5:FB9897A8A49A677715C2080447BE5572
希望对大家有所帮助。
原文地址:/article/5403873.html
近期发现有些朋友转载了这篇日志,
但大部分转载过去后代码格式发生了紊乱,图片也不能正常显示。
为了不影响读者的阅读和学习,请转载的朋友把本文的链接地址一并加上,谢谢!!!
当然,这一段废话就不用加上去了^_^
相关文章推荐
- 自己实现的数据表格控件(dataTable),支持自定义样式和标题数据、ajax等各种自定义设置以及分页自定义
- 自己实现的数据表格控件(dataTable),支持自定义样式和标题数据、ajax等各种自定义设置以及分页自定义
- 来自MSDN的一个Sample:如何自定义 Windows 窗体 DataGridView 控件中的数据格式设置
- 如何为自定义控件设置图标——ToolboxBitmap的用法
- 【.Net码农】ASP.NET数据控件的自定义模板
- 图形的绘制,如何使用自定义画笔(颜色,线宽,线形)。如何为程序中添加选项菜单和选项设置对话框,如何使用标准颜色对话框,如何使用字体对话框,在选项对话框中实现预览功能。实现选项对话框和窗口类中的数据交换。如何改变对话框和控件的背景色,如何改变控件的文本颜色,
- .NET中TextBox控件设置ReadOnly=true后台取不到值三种解决方法
- [ASP] 设置数据的输出格式-使用控件Repeater
- .NET中TextBox控件设置ReadOnly=true后台取不到值 三种解决方法
- javafx在子线程中改变数据并将其设置显示在图形化控件上报错的解决方法
- .NET的三种缓存(页面缓存,控件缓存,自定义缓存)
- android的Spinner控件的自定义样式设置以及ArrayAdapter的使用
- 解决:VB.NET程序中 datagridview 多次绑定出现 的“不能在数据绑定的 DataGridView 控件上设置 ColumnCount
- EasyUI学习笔记(1)----Tree控件实现过程中.NET下无法访问json数据的解决办法
- 构建自定义控件之三——处理回传数据和事件
- 基于.net平台的自定义绘制波形控件
- .NET各大平台数据列表控件绑定原理及比较(WebForm、Winform、WPF)
- .net几个常用数据控件的区分
- .NET中TextBox控件设置ReadOnly=true后台取不到值的解决方法
- [iOS基础控件 - 6.6.1] 展示团购数据代码[iOS基础控件 - 6.7] 微博展示 使用代码自定义TableCell(动态尺寸)