При рисовании нестандартных элементов управления или изображений обычно используют один из двух подходов: перекрывают метод OnPaint или перехватывают событие Paint.
protected override void OnPaint(PaintEventArgs e) { // тут что-то происходит.... }
или
private void Form_Paint(object sender, PaintEventArgs e) { // тут что-то происходит.... }
Недавно столкнулся с проблемой, что перекрытый метод OnPaint не вызывается, а обработка события Paint не происходит. Поиск в яндексе дал пару похожих проблем, которые несколько лет остаются без решения либо решены окольными путями.
Как известно, метод OnPaint(PaintEventArgs e) (и, соответственно, событие Paint) вызывается в следующих ситуациях:
- контрол (или форма) выводится впервые;
- происходит изменение размера контрола или формы (в том числе при изменении ориентации экрана);
- элемент управления становится видимым;
- были вызваны методы Refresh или Invalidate контрола (или формы).
Решение оказалось довольно банальным, хотя и потребовало немало времени, чтобы понять что к чему. Так вот. Элемент управления был скрыт другими элементами, поэтому нужды в его отрисовки не было. Стоит поместить элемент поверх других элементов, как метод OnPaint начинает вызываться, а событие Paint - обрабатываться.
Комментариев нет:
Отправить комментарий