可移动的矩形或标签

时间:2011-10-04 18:17:24

标签: c# winforms highlight

我正在Visual C#2010中编写一个程序,该程序在表单上有几个图标。当鼠标放在图标上方(这只是一个图像)时,我希望通过图标周围的边框突出显示图标。在visual basic中,我可以创建一个带有彩色边框的透明矩形,并将其放置在图标上。在C#中,我可以这样做,直到我调用invalidate多个边框出现。调用invalidate的问题是我的程序每秒都在后台执行某些操作,因此边框会一直闪烁(重新绘制)。

任何人都有任何想法如何实现这个?

1 个答案:

答案 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#中是相同的。