Подвижный прямоугольник или метка - PullRequest
1 голос
/ 04 октября 2011

Я пишу программу в Visual C # 2010 с несколькими значками в форме.Когда мышь находится над значком (который является просто изображением), я хочу, чтобы значок был подсвечен через рамку вокруг значка.В Visual Basic я могу сделать прозрачный прямоугольник с цветной рамкой и расположить его над значком.В C # я могу сделать то же самое, однако, пока я не призываю аннулировать несколько границ появляются.Проблема с вызовом invalidate заключается в том, что моя программа каждую секунду делает что-то в фоновом режиме, поэтому рамка продолжает мигать (перерисовывает).

У кого-нибудь есть идеи, как я могу это реализовать?

1 Ответ

0 голосов
/ 04 октября 2011

Вы не сказали как вы рисуете границу, но из своего описания вы создаете графический контекст для этого.Не делай этого, это неправильно.Вместо этого нарисуйте элемент 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 #.

...