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

У меня есть 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, но прямоугольник рисуется и во всех дочерних элементах управления! Я никогда не читал, это должно быть вызвано для каждого дочернего элемента управления, есть ли решение?

Ответы [ 2 ]

6 голосов
/ 07 марта 2009

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

3 голосов
/ 07 марта 2009

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

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

...