método OnPaint está sendo chamada para cada controle filho
Pergunta
Eu tenho um UserControl (WinForms, .net 2.0), e eu tenho o seguinte:
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);
}
Basicamente, eu quero desenhar uma borda no UserControl, mas o retângulo está sendo empate em todos os controles da criança também! Eu nunca li ele deve ser chamado para cada controle filho, há uma solução?
Solução
Uma vez que os controles filho invalida o pai, fazendo com que este método seja disparado para cada um.
Em vez de usar e como o parâmetro (e vai ser qualquer controle disparou o evento, criança ou não) usar o nome do controle explicitamente.
Outras dicas
Por que você está usando PaintEventArgs.ClipRectangle
para determinar os limites do retângulo? Tente usar Control.ClientRectangle
.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow