2013-05-05 12 views
5

Ho un modulo che sto utilizzando utilizzando ShowDialog che contiene un paio di caselle di testo, etichette e un pulsante. Il problema che sto avendo è che le caselle di testo vengono disegnate prima del modulo stesso e gli altri controlli sono disegnati.I controlli non vengono disegnati allo stesso tempo

sto override del metodo OnPaint non sono sicuro se questo potrebbe essere la causa del problema:

protected override void OnPaint(PaintEventArgs e) 
{ 
    ControlPaint.DrawBorder(e.Graphics, e.ClipRectangle, Color.Black, ButtonBorderStyle.Solid); 
    base.OnPaint(e); 
} 

E 'solo un leggero ritardo, ma è visibile e fastidioso. Grazie.

Il modulo è doppio bufferato a proposito.

MODIFICA: Ho individuato il problema per il fatto che il modulo non ha uno FormBorderStyle. Con FormBorderStyle impostato su Sizable, questo problema non si verifica. Tuttavia, tieni presente che avere lo FormBorderStyle.None come stile del mio bordo è necessario, quindi non ho ancora trovato una soluzione.

+1

potete inserire tutto il codice rilevanti relative al disegno delle etichette, caselle di testo e pulsanti? – JosephGarrone

+0

In realtà, l'elemento parent chiama il metodo di rendering di ogni controllo figlio prima di eseguire il rendering. Questo è il comportamento predefinito. Può essere che tu possa mostrare il dialogo una volta completato il caricamento del modulo. – Saravanan

+0

Tutti i controlli sono stati aggiunti tramite il designer di Visual Studio, quindi non ho toccato il disegno di questi controlli. –

risposta

1

Prova ad aggiungere questo alla forma della finestra di dialogo:

protected override CreateParams CreateParams 
    { 
     get 
     { 
      // Activate double buffering at the form level. All child controls will be double buffered as well. 

      CreateParams cp = base.CreateParams; 

      cp.ExStyle |= 0x02000000; // WS_EX_COMPOSITED 

      return cp; 
     } 
    } 
+0

Questo ha funzionato grazie !! –