Метод OnPaint вызывается для каждого дочернего элемента управления
Вопрос
У меня есть 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
вместо этого.