按钮控件,就像你说的那样,是一个好的开始。您需要一个按钮才能使图像变得可以聚焦和点击。 PictureBox不支持这些事情。你显然可以编写代码来手动处理这些东西,但没有意义,因为Button已经内置了它。所以现在这场战斗就是定制Button控件来做你想做的事情。
从截图看来,您已经发现需要处理Enter
和Leave
事件才能将图像从“正常”状态更改为“热”状态,然后返回再次。而要得到你想要的模样,你已经设置按钮的FlatStyle
属性FlatStyle.Flat
和FlatAppearance.BorderSize
属性为0
所以,唯一的问题是焦点提示是让周围的按钮控制绘制时,它具有焦点。通常,想要这个,因为有人用键盘导航你的应用程序需要一些方法来找出哪个控件当前有重点。但是你通过改变显示的图像来给他们一个,所以你可以安全地禁用这些焦点提示。做到这一点的方法是继承Button类并覆盖ShowFocusCues
property。
添加一个新的代码文件到您的项目包含下面的类声明:
public class ImageButton : Button
{
public ImageButton()
{
// Set default properties.
this.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.FlatAppearance.BorderSize = 0;
}
protected override bool ShowFocusCues
{
get { return false; }
}
}
然后,使用ImageButton
类的按钮控件,而不是内置Button
类。这种类型的控件将自动具有您所需的行为。
如果您需要在您的自定义按钮的外观进行更多的控制,可以覆盖其OnPaint
方法。如果您不想要任何默认行为,请跳过调用基类实现。例如,我们可以简单地删除按钮的背景并绘制其图像:
protected override void OnPaint(PaintEventArgs pevent)
{
// do not call the base class implementation
// base.OnPaint(e);
// erase the background
pevent.Graphics.FillRectangle(SystemBrushes.Control, this.ClientRectangle);
// draw the image at the top-left
pevent.Graphics.DrawImage(this.Image, Point.Empty);
}
您使用的是哪种UI框架?的WinForms? WPF?的WebForms?还有别的吗? – 2013-04-03 22:57:51
框架是4。5或更高版本,应用程序是winForms – tonni 2013-04-03 22:58:35
这些PictureBox控件是用来显示图像的吗? – 2013-04-03 23:06:35