首页 > 代码库 > 制作可自定义风格的winform组件类(四)简单按钮

制作可自定义风格的winform组件类(四)简单按钮

实际上这并不是一个按钮,只是一个变换背影图层而已,但通过过滤背景色,它实现了按钮的不规则形态,例如最常见的圆角风格,下面是代码

namespace CDTheme{    public abstract partial class CDBaseImage : CDBase    {        private Image _normalImage;        private Image _disabledImage;        public CDBaseImage()        {            InitializeComponent();        }        [Browsable(false)]        public override Image BackgroundImage        {            get            {                return base.BackgroundImage;            }            set            {                base.BackgroundImage = value;            }        }                public Image NormalBackImage        {            get            {                return _normalImage;            }            set            {                _normalImage = value;                BackImageChanged();            }        }        public Image DisabledBackImage         {            get             {                return _disabledImage;            }            set            {                _disabledImage = value;                BackImageChanged();            }        }        public Image MouseMoveBackImage { get; set; }        public Image MouseDownBackImage { get; set; }        private void BackImageChanged()        {            if (!CDEvent.HasFlag(CDControlEvent.BackImage))                return;            if (Enabled)            {                if (CDState.HasFlag(CDControlState.MouseDown))                {                    if (MouseDownBackImage != null)                        BackgroundImage = MouseDownBackImage;                }                else if (CDState.HasFlag(CDControlState.MouseEnter))                {                    if (MouseMoveBackImage != null)                        BackgroundImage = MouseMoveBackImage;                }                else                {                    if (NormalBackImage != null)                        BackgroundImage = NormalBackImage;                }            }            else            {                BackgroundImage = DisabledBackImage == null ? NormalBackImage : DisabledBackImage;            }        }        protected override void StateChanged(CDControlState changedState, bool allow)        {            base.StateChanged(changedState, allow);            BackImageChanged();        }    }}

 

显然你看到了abstract关键字,这说明这个类只是封装了背景变换的相关属性和功能实现,但却不能直接使用,这是因为更多的复杂控件需要以它来派生,为了能实现简单按钮的功能,又有了下面这个真正可以在IDE中显示并使用的winform组件

namespace CDTheme{    [ToolboxItem(true)]    [DefaultEvent("Click")]    public partial class CDBackImage : CDBaseImage    {        public CDBackImage()        {            SetCDControlEvent(CDControlEvent.BackImage | CDControlEvent.MouseClick | CDControlEvent.MouseMove, true);            InitializeComponent();            DesigntimeSkinLoad("CDBackImage");        }    }}

ToolboxItemAttribute特性决定了这个组件将显示在工具窗口中

DefaultEventAttribute特性决定了这个组件的默认事件,也就是我们在IDE窗口中双击时的事件

SetCDControlEvent方法决定了这个组件所响应的需求,在父类的StateChanged方法中完成了需求的功能,也就是背景变化

DesigntimeSkinLoad方法是在设计时装载已定义的组件皮肤的,这个示例没有内容会单独用一篇内容来阐述

在父类中,在NormalBackImage和DisabledBackImage属性的set方法中调用了BackImageChanged方法,目的是在设计时能够在IDE中体现背景变化的效果

 

演示一下吧,在设计器上建一个窗口,把此控件拖进来,NormalBackImage、DisabledBackImage、MouseMoveBackImage和MouseDownBackImage属性上设计对应的图片后,这个示例程序就做好了,效果图如下

 

后话,只是一个变换背影的小功能是用不着写这么多代码的,这只是一个示例,更多复杂和漂亮的功能,在以后会为大家展示

制作可自定义风格的winform组件类(四)简单按钮