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?

È stato utile?

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
scroll top