原文地址: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