1

我想制作高亮图像,就像它在谷歌应用程序(html 中的谷歌 g+)中一样,当鼠标在它上面时只突出显示图像(没有边界边框,整个区域)。

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

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

图片显示 C# APPS 突出显示图像以及整个区域(灰色矩形)。 如何绕过那些灰色矩形?

在此处输入图像描述

更多详细信息:Framework 4.5 或更高版本,WinForms,Win7 如果其他控件以更智能的方式执行此操作,则应用程序不一定使用图像控件...请告诉我...

4

1 回答 1

2

Button 控件,就像您说的那样,是一个好的开始。您需要一个按钮才能使图像具有焦点和可点击性。PictureBox 不支持其中任何一个。您显然可以编写代码来手动处理这些事情,但是没有任何意义,因为 Button 已经内置了它。所以现在战斗变成了自定义 Button 控件以执行您想要的操作。

从您的屏幕截图中也可以看出,您已经发现需要处理EnterandLeave事件才能将图像从“正常”状态更改为“热”状态,然后再返回。为了获得您想要的外观,您已将 Button 的FlatStyle属性设置为FlatStyle.Flat并将该FlatAppearance.BorderSize属性设置为 0。

所以唯一的问题是,当 Button 控件获得焦点时,焦点提示会围绕它绘制。通常,您会希望这样做,因为使用键盘导航您的应用程序的人需要某种方法来确定当前哪个控件具有焦点。但是你通过改变它显示的图像给他们一个,所以你可以安全地禁用这些焦点提示。做到这一点的方法是从 Button 类继承并覆盖ShowFocusCues属性

将包含以下类声明的新代码文件添加到您的项目中:

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);
}
于 2013-04-03T23:39:57.983 回答