Questo ha effetto solo sul modulo stesso, non sui controlli figlio. Se ne hai molti, allora il tempo necessario per dipingere a turno diventa evidente, lascia un buco rettangolare dove va il controllo che non si riempie finché il controllo figlio non lo fa girare.
Quello che ti serve per combattere questo è il doppio buffering dell'intero modulo e i controlli. Questa è un'opzione disponibile da quando Windows XP ha reso disponibile il flag di stile WS_EX_COMPOSITED. Incolla questo nella vostra forma per accenderlo:
protected override CreateParams CreateParams {
get {
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x02000000; // Turn on WS_EX_COMPOSITED
return cp;
}
}
Non accelerare il dipinto a tutti, ma la forma scatta sullo schermo dopo un ritardo. Eliminazione degli artefatti pittorici visibili. Fissare davvero il ritardo non richiede l'uso di controlli. Che cosa faresti utilizzando il metodo OnPaint per disegnare i 'controlli' e rendere l'evento OnMouseClick intelligente su cosa 'controllo' è stato cliccato dall'utente.
fonte
2010-09-15 14:33:43
WS_EX_COMPOSITED sta lavorando solo su temi classici sotto win7/vista, non su temi aerodinamici. Qualcuno conosce la soluzione in questo caso? – KevinBui
@DKhanh - questo ha funzionato per me su Aero –
Funziona come un incantesimo (non un riferimento agli incantesimi di Windows 8, ma spero che funzioni anche su Windows 8 e XP, se necessario). –