图片框上的鼠标事件?

时间:2012-08-07 17:16:24

标签: c# .net winforms mouseevent picturebox

我有一个“开始”按钮,其中包含我制作的自定义图像。我没有搞乱C#.net的这一部分,但我对VB.NET有点了解。

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

MouseDown会将图片更改为StartButtonDown

MouseUp会将图片更改为StartButtonUp

MouseEnter会将图片更改为StartButtonHover

MouseLeave会将图片更改为StartButtonUp

我是否应该做一些具体的事情,我已经对它进行了大约一个小时的讨论,但仍然找不到任何可以帮助我的事情。

1 个答案:

答案 0 :(得分: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。

您还可以检查使用的是哪个鼠标按钮。也许你只想通过左键单击而不是右键或中键来改变图像。

但这应该让你开始。