La méthode OnPaint est en cours d'appel pour chaque contrôle enfant
Question
J'ai un UserControl (WinForms, .net 2.0) et j'ai ceci:
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);
}
En gros, je veux dessiner une bordure sur UserControl, mais le rectangle est également dessiné dans tous les contrôles enfants! Je ne lis jamais qu'il devrait être appelé pour chaque contrôle enfant, existe-t-il une solution?
La solution
Étant donné que les contrôles enfants invalident le parent, la méthode est activée pour chacun d'eux.
Au lieu d'utiliser e comme paramètre (e sera quel contrôle a déclenché l'événement, enfant ou non), utilisez explicitement le nom du contrôle.
Autres conseils
Pourquoi utilisez-vous PaintEventArgs.ClipRectangle
pour déterminer les limites du rectangle? Essayez d'utiliser Control.ClientRectangle
à la place.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow