2009-03-06 6 views
3

У меня есть UserControl (WinForms, .NET 2.0), а у меня это:OnPaint метода является вызовом для каждого дочернего элемента управления

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

ответ

3

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

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

+0

Вы имеете в виду использовать его в качестве переданного параметра, например '(PaintEventArgs UserControl)' или как 'UserControl.Graphics'? – TheLethalCoder

+0

Этот ответ неверен. См. @ Shog9 ответ – JustAnotherCoder

6

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