2013-04-03 79 views
1

当鼠标放在上面时,如果仅突出显示图像(没有边框边框,整个区域),我想使它像谷歌应用(谷歌g +在html中)一样高亮显示图像。如何在c#中只显示没有整个区域的图像?

在c#中我使用图像来做到这一点,但每次当我用鼠标获取图像时,它会突出显示所有区域(边界边框+图像)。

所以,现在我的问题是:如何突出显示没有整个区域的图像?

图片显示C#应用高亮图像和整个区域(灰色矩形)。 如何绕过那些灰色的矩形?

enter image description here

更多细节:框架4.5或更高的WinForms,Win7的 如果另一控制做,在更聪明的方式......请让我知道这并不一定是应用程序使用的图像控制...

+0

您使用的是哪种UI框架?的WinForms? WPF?的WebForms?还有别的吗? – 2013-04-03 22:57:51

+0

框架是4。5或更高版本,应用程序是winForms – tonni 2013-04-03 22:58:35

+0

这些PictureBox控件是用来显示图像的吗? – 2013-04-03 23:06:35

回答

2

按钮控件,就像你说的那样,是一个好的开始。您需要一个按钮才能使图像变得可以聚焦和点击。 PictureBox不支持这些事情。你显然可以编写代码来手动处理这些东西,但没有意义,因为Button已经内置了它。所以现在这场战斗就是定制Button控件来做你想做的事情。

从截图看来,您已经发现需要处理EnterLeave事件才能将图像从“正常”状态更改为“热”状态,然后返回再次。而要得到你想要的模样,你已经设置按钮的FlatStyle属性FlatStyle.FlatFlatAppearance.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); 
} 
+0

感谢科迪......当最需要的时候,你总是帮助我:) – tonni 2013-04-03 23:46:00

相关问题