这是我写的与您需要的非常相似的东西。
using System;
using System.Drawing;
using System.Windows.Forms;
public partial class ImageButton : PictureBox
{
private Image _upImage, _downImage, _hoverImage;
[System.ComponentModel.Browsable(true),
System.ComponentModel.Category("Images")]
public Image UpImage
{
get { return _upImage; }
set
{
if (value != null)
{
_upImage = value;
this.Image = _upImage;
}
}
}
[System.ComponentModel.Browsable(true),
System.ComponentModel.Category("Images")]
public Image DownImage
{
get { return _downImage; }
set
{
if (value != null)
{
_downImage = value;
}
}
}
[System.ComponentModel.Browsable(true),
System.ComponentModel.Category("Images")]
public Image HoverImage
{
get { return _hoverImage; }
set
{
if (value != null)
{
_hoverImage = value;
}
}
}
public ImageButton()
{
InitializeComponent();
}
protected override void OnMouseDown(MouseEventArgs e)
{
if (DownImage != null)
this.Image = DownImage;
base.OnMouseDown(e);
}
protected override void OnMouseUp(MouseEventArgs e)
{
if (UpImage != null)
this.Image = UpImage;
base.OnMouseUp(e);
}
protected override void OnMouseEnter(EventArgs e)
{
if (HoverImage != null)
this.Image = HoverImage;
base.OnMouseEnter(e);
}
protected override void OnMouseLeave(EventArgs e)
{
if (UpImage != null)
this.Image = UpImage;
base.OnMouseLeave(e);
}
}
我所做的是继承自标准PictureBox
以制作ImageButton
. 我有三个属性用于在Image
没有鼠标操作的情况下显示 (UpImage)、在Image
触发 MouseDown 事件时显示 (DownImage) 以及Image
在鼠标悬停在控件上时显示 (HoverImage)。
请注意,您应该添加对 MouseUp 和 MouseLeave 事件的检查。如果我单击图像并将鼠标拖离控件,控件将再次从 UpImage 转到 DownImage 再到 UpImage,因为即使我的鼠标仍然向下,我已经离开了控件 (MouseLeave)。当鼠标离开控件时,您可能希望 DownImage 保持显示。此外,当 MouseUp 事件发生时,您应该检查鼠标是否仍悬停在控件上。如果是,您将希望显示 HoverImage 而不是 UpImage。
您还可以检查使用了哪个鼠标按钮。也许您只希望图像通过左键单击来更改,而不是右键或中间。
但这应该让你开始。