1

我有一个带有我制作的自定义图像的“开始”按钮。我没有弄乱 C#.net 的这一部分,但我对 VB.NET 有所了解。

我见过人们有类似public void picturebox_MouseDown()的东西,但似乎没有一个有效。我正在尝试在给出鼠标事件时更改图像。

MouseDown 会将图像更改为 StartButtonDown

MouseUp 将图像更改为 StartButtonUp

MouseEnter将图像更改为 StartButtonHover

MouseLeave将图像更改为 StartButtonUp

有什么具体的我应该做的吗,我已经用谷歌搜索了大约一个小时,但仍然没有找到任何可以帮助我的东西。

4

1 回答 1

0

这是我写的与您需要的非常相似的东西。

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。

您还可以检查使用了哪个鼠标按钮。也许您只希望图像通过左键单击来更改,而不是右键或中间。

但这应该让你开始。

于 2012-08-08T12:19:49.253 回答