【Winform-自定义控件】ImageButton 支持鼠标正常、悬停、按下更改图片,支持文本...

本文介绍如何创建一个自定义的Winform控件ImageButton,该控件支持鼠标不同状态(正常、悬停、按下)下更换图片,并且可以显示文本。详细讲解了控件的实现过程,包括鼠标事件处理、文本绘制、隐藏不需要的属性以及键盘事件响应等。
摘要由CSDN通过智能技术生成

原文地址:https://www.codeproject.com/Articles/29010/WinForm-ImageButton

 

自定义winfrom图片按钮:支持鼠标正常、悬停、按下更改图片,支持文本。

首先,创建没有按钮文本的图片,这样的:

正常:      悬停:       按下:

添加ImageButton控件并设置图像属性,然后设置文本Text,设置字体Font。

 

1.创建ImageButton类,重写PictureBox控件,实现IButtonControl接口。

实现IButtonControl接口,将允许ImageButton按钮与窗体上的任何其他按钮一起使用,作为默认按钮或取消按钮。

 public class ImageButton : PictureBox, IButtonControl

2.鼠标方法

思路很简单。就是创建一个图片显示在屏幕上,如果用户将鼠标停留在图片上,就会切换图片到HoverImage,

鼠标按下就会切换图片到DownImage。

  2.1 设置属性

        private bool hover = false;
        private bool down = false;

        #region HoverImage
        private Image m_HoverImage;
        [Category("Appearance")]
        [Description("Image to show when the button is hovered over.")]
        public Image HoverImage
        {
            get { return m_HoverImage; }
            set { m_HoverImage = value; if (hover) Image = value; }
        }
        #endregion

        #region DownImage
        private Image m_DownImage;
        [Category("Appearance")]
        [Description("Image to show when the button is depressed.")]
        public Image DownImage
        {
            get { return m_DownImage; }
            set { m_DownImage = value; if (down) Image = value; }
        }
        #endregion

        #region NormalImage
        private Image m_NormalImage;
        [Category("Appearance")]
        [Description("Image to show when the button is not in any other state.")]
        public Image NormalImage
        {
            get { return m_NormalImage; }
            set { m_NormalImage = value; if (!(hover || down)) Image = value; }
        }
        #endregion

  2.2 重写OnMouseMove事件

当鼠标移动到ImageButton上时调用OnMouseMove。避免使用OnMouseHover,因为这个方法会延迟调用。

设置hover=true,表示鼠标悬停在ImageButton上,

然后判断down的值,down=true时,设置按钮图片为DownImage;down=false时,设置按钮图片为HorverImage。

        protected override void OnMouseMo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值