Метод OnPaint вызывается для каждого дочернего элемента управления

StackOverflow https://stackoverflow.com/questions/620533

  •  05-07-2019
  •  | 
  •  

Вопрос

У меня есть UserControl (WinForms, .net 2.0), и я имею это:

protected override void OnPaint(PaintEventArgs e)
{
    base.OnPaint(e);

    var rect = e.ClipRectangle;
    var pen = new Pen(Brushes.LightGray, 1);

    e.Graphics.DrawRectangle(pen, rect);
}

Я в основном хочу нарисовать границу в UserControl, но прямоугольник рисуется и во всех дочерних элементах управления! Я никогда не читал, что это должно быть вызвано для каждого дочернего элемента управления, есть ли решение?

Это было полезно?

Решение

Поскольку дочерние элементы управления лишают законной силы родительский элемент, вызывая запуск этого метода для каждого из них.

Вместо использования e в качестве параметра (e будет зависеть от того, какой элемент управления вызвал событие, дочернее или нет), используйте простоту имени элемента управления.

Другие советы

Почему вы используете PaintEventArgs.ClipRectangle для определения границ прямоугольника? Попробуйте использовать Control.ClientRectangle вместо этого.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top