WinForm组件开发:构造ImageButton控件

.NET自带的Button按钮和PictureBox在做某种特效的时候很难控制,除了调节属性之外,还要写代码,是不是很麻烦。如果你的开发团队让你构造一个Button组件,来换掉.NET自带的哪个Button,这篇文章将引导你实现这个需求。
先看下我们要开发的这个IamgeButton的功能:
1,支持属性窗口。
2,提供ButtonText,ButtonImage,MouseOverImage,MouseClickImage四个属性来实现我们要的特效。
特效阐述:我只需要设置上面的四个属性,不写一行代码就可以实现ImageButton的动态效果,默认ImageButton的显示图片是ButtonImage这个的属性设置的。当鼠标移动到这个按钮上时会产生动态效果,从而切换到另一张图片,这是MouseOverImage属性的功能。当你点击按钮时候,就会切换到另一张图片,实现动态效果,这个是MouseClickImage属性实现的。
3,上面四个属性都放在了属性窗口的“重要属性”项中。
4,支持普通Button的功能。
这个按钮可以加快你的项目进度,再也不为.NET提供的单调的Button花时间去控制它的样式。
组件下载地址:LT.WinForm.ImageButton.dll
组件演示项目:TestImageButton.rar
演示图片:


当鼠标移动到登录或者退出按钮上时,背景效果就会变成下图:

当鼠标单击登录或者退出按钮时,背景效果就会变成下图:

当鼠标离开登录或者退出按钮时候,背景效果就会变成默认的图片:


ImageButton的实现思想:
ImageBoutton总体上是通过继承UserControl类,结合Lable和PictureBox控件来构造的。实现了Lable和PictureBox的5个鼠标事件,重写了单击事件。其中的一个难点就是怎么实现单击事件和Lable的永远在最中间显示。四个属性的实现难度不大,但配合PictuerBox实现图片的切换的确有点难度。

注:ImageButton组件已经在几个项目使用过,请大家放心使用和扩展。
源代码下载地址:LT.WinForm.ImageButton

如果你看过源代码,有什么好的建议,请反馈给我,谢谢。

posted @ 2008-04-04 15:08 李涛 阅读(10168) 评论(19) 编辑 收藏

 回复 引用   
#1楼2008-04-04 18:46 | 沉默的老虎[未注册用户]
我觉得应该用WPF做
那样应该会很简单。

 回复 引用 查看   
#2楼[楼主]2008-04-04 19:52 | 李涛      
@沉默的老虎
WPF的思想不错,基本它算是.NET平台下开发软件的另一种选择了。
不过用WPF不见得简单。

 回复 引用 查看   
#3楼2008-04-04 19:57 | 李战      
怎么说都是楼主的心意,路过,支持一下。
 回复 引用 查看   
#4楼2008-04-04 22:31 | 风雨工作室      
我也做过ImageButton,但是我只用了一张图标,其余的鼠标进入,按下,离开的效果都应该自己绘制才好,否则你用了4张图片,实在是消耗资源了,虽然这点资源可能你觉得无所谓。另外直接继承Control就够了,所有的外观都自己绘制会更灵活些
 回复 引用 查看   
#5楼[楼主]2008-04-05 01:44 | 李涛      
@李战
谢谢支持!

 回复 引用 查看   
#6楼[楼主]2008-04-05 01:47 | 李涛      
@风雨工作室
一张图片都没用啊,上面的图只是演示的代码.

 回复 引用 查看   
#7楼2008-04-05 08:14 | 罗志威      
我也建议采用WPF来实现类似的功能,采用样式表来达到效果。
 回复 引用 查看   
#8楼[楼主]2008-04-05 13:31 | 李涛      
@罗志威
WPF是.NET下程序设计的一种很新颖的技术,基本上和传统的.NET软件开发属于2个分支了,在WPF没出现之前,构造组件的技术在传统.NET软件开发方面是很重要的。
上面这个组件和WPF没什么关系,不见得什么都得WPF来实现。

 回复 引用 查看   
#9楼[楼主]2008-04-05 13:33 | 李涛      
@风雨工作室
上面这个组件,在项目中用过有几次了,在效率方面绝对没什么问题。

 回复 引用 查看   
#10楼2008-04-05 23:21 | 风雨工作室      
@李涛
当鼠标移动到这个按钮上时会产生动态效果,从而切换到另一张图片,这是MouseOverImage属性的功能。当你点击按钮时候,就会切换到另一张图片,实现动态效果,这个是MouseClickImage属性实现的。

这里应该用了几张图片吧
=============================
继承UserControl类,结合Lable和PictureBox控件来构造

肯定比不上直接继承Control绘制按钮更方便,虽然代码多些。

============================
效率问题在Winform中可能问题不大,但是如果能节省一些资源更好,
特别是当你需要把这个控件迁移到Mobile开发中时



 回复 引用 查看   
#11楼[楼主]2008-04-05 23:41 | 李涛      
@风雨工作室
同意你考虑效率的观点,这个确实在Mobile开发中很关键,当然在WinForm开发中也很关键。

 回复 引用 查看   
#12楼2008-05-13 13:13 | csulonely      
劳动成果,我要感谢,学习!
 回复 引用 查看   
#13楼2009-04-03 11:27 | 碧血黄沙.NET      
看着不错
 回复 引用 查看   
#14楼2009-06-05 11:35 | Edwin dong      
我这块使用的时候其他感觉都很不错,就是按钮没有边框啊,看着和我们使用的按钮不一样啊。
 回复 引用 查看   
#15楼2011-06-15 09:05 | 风雨过路人      
支持一下。
 回复 引用 查看   
#16楼2011-08-17 21:31 | mr.cui      
路过支持~