码迷,mamicode.com
首页 > Windows程序 > 详细

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

时间:2014-11-11 18:29:28      阅读:379      评论:0      收藏:0      [点我收藏+]

标签:des   winform   style   blog   http   color   ar   使用   sp   

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

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属性上设计对应的图片后,这个示例程序就做好了,效果图如下

bubuko.com,布布扣

 

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

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

标签:des   winform   style   blog   http   color   ar   使用   sp   

原文地址:http://www.cnblogs.com/ccddnet/p/4090001.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!