2011-02-15 4 views
0

J'ai une application C# avec une mainform et plusieurs commandes utilisateur personnalisées.C# Contrôle utilisateur Repaint

Lorsque je déplace la mainform, les contrôles utilisateur continuent de repeindre et ils repeignent à nouveau lorsque j'arrête de déplacer la mainform. Que puis-je faire pour désactiver cette nouvelle couche?

+0

Y a-t-il un scintillement d'écran? voulez-vous arrêter ce scintillement – Nighil

Répondre

0

Si son scintillement vous embête, vous pouvez essayer de définir la propriété DoubleBuffered sur le contrôle sur true.

Autre que vous pouvez souscrire les formes se déplacent événement et éteignent la peinture sur les contrôles enfants d'une manière similaire à ce qui est décrit dans cette question ...

Have a look here

+0

Hmm ... Le problème est que le contrôle n'est pas peint du tout quand je ne le repeins pas quand la mainform a bougé. Ce que je veux: Redessiner seulement le contrôle enfant n ° 1 et laisser les autres tels quels (pas de repeint) quand la mainform a bougé. – jfronner

0

Vous ne devriez pas avoir à force Invalider() vous-même. Je suppose que vous faites une peinture personnalisée dans le contrôle? Dans le constructeur après le InitializeComponent(); Avez-vous

SetStyle(ControlStyles.UserPaint, true); 
    SetStyle(ControlStyles.AllPaintingInWmPaint, true); 

?

2

Une réponse à this previous question explique comment utiliser l'API Win32 WM_SETREDRAW pour suspendre et reprendre le dessin. Il comprend une belle classe d'emballage; peut-être que cela vous aidera.