我正在Visual C#2010中编写一个程序,该程序在表单上有几个图标。当鼠标放在图标上方(这只是一个图像)时,我希望通过图标周围的边框突出显示图标。在visual basic中,我可以创建一个带有彩色边框的透明矩形,并将其放置在图标上。在C#中,我可以这样做,直到我调用invalidate多个边框出现。调用invalidate的问题是我的程序每秒都在后台执行某些操作,因此边框会一直闪烁(重新绘制)。
任何人都有任何想法如何实现这个?
答案 0 :(得分:0)
您没有说如何绘制边框,但是根据您的描述,您正在为此创建图形上下文。不要这样做,这是错误的。相反,在控件或其父容器的Paint
元素内绘制。
Paint
事件处理程序可能如下所示:
private void yourControl_Paint(object sender, PaintEventArgs e)
{
if (! HasFocus(yourControl))
return;
Graphics g = e.Graphics;
using (Pen p = new Pen(Color.FromArgb(128, 0, 0, 128)))
g.DrawRectangle(p, 0, 0, yourControl.Width -1, yourControl.Height - 1);
}
这使用假设的HasFocus
方法来确定此控件是否应该具有焦点矩形。
顺便说一句,这在VB和C#中是相同的。