Il metodo OnPaint viene chiamato per ogni controllo figlio
Domanda
Ho un UserControl (WinForms, .net 2.0) e ho questo:
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);
}
In pratica voglio disegnare un bordo su UserControl, ma il rettangolo viene disegnato anche in tutti i controlli figlio! Non ho mai letto che dovrebbe essere chiamato per ogni controllo figlio, esiste una soluzione?
Soluzione
Poiché i controlli figlio invalidano il genitore, causando l'attivazione di questo metodo per ciascuno.
Invece di usare e come parametro (e sarà il controllo che ha generato l'evento, figlio o meno) usare l'espressione nome del controllo.
Altri suggerimenti
Perché stai usando PaintEventArgs.ClipRectangle
per determinare i limiti del rettangolo? Prova a utilizzare Control.ClientRectangle
invece.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow