我有一个“开始”按钮,其中包含我制作的自定义图像。我没有搞乱C#.net的这一部分,但我对VB.NET有点了解。
我见过人们有public void picturebox_MouseDown()
之类的东西,但似乎都没有。我正在尝试在给出鼠标事件时更改图像。
MouseDown
会将图片更改为StartButtonDown
MouseUp
会将图片更改为StartButtonUp
MouseEnter
会将图片更改为StartButtonHover
MouseLeave
会将图片更改为StartButtonUp
我是否应该做一些具体的事情,我已经对它进行了大约一个小时的讨论,但仍然找不到任何可以帮助我的事情。
答案 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。
您还可以检查使用的是哪个鼠标按钮。也许你只想通过左键单击而不是右键或中键来改变图像。
但这应该让你开始。