2010-05-13 5 views
0

J'essaie de créer mon propre contrôle personnalisé pour une application Windows Forms en C# .Net. Actuellement, je peins des rectangles et d'autres éléments graphiques en utilisant l'événement paint. Lorsque je redimensionne maintenant le formulaire d'application en fonction de la taille du bureau, tous les éléments sont repeints (ce qui est exactement le comportement dont j'ai besoin), mais les anciens sont affichés en arrière-plan.C# - efface la surface lors du redimensionnement

Voici ce que je fais maintenant:

Pen penDefaultBorder = new Pen(Color.Wheat, 1); 
int margin = 5; 
private void CustomControl_Paint(object sender, PaintEventArgs e) { 
    CustomControl calendar = (CustomControl)sender; 
    Graphics graphics = e.Graphics; 
    graphics.Clear(Color.WhiteSmoke); 

    graphics.DrawRectangle(penDefaultBorder, margin, margin, calendar.Width - margin * 2, calendar.Height - margin * 2); 
    //... 
} 

Ni le graphics.Clear, ni l'ajout d'un graphics.FillRectangle (...) se cacheront l'ancien rectangle de la surface.

Des idées? Merci à tous.

Répondre

1

Avez-vous essayé .Invalidate() pour que le formulaire soit redessiné?

+0

Cela fonctionnera; c'est un peu une approche de fusil de chasse, mais cela fonctionnera. Je préfère toujours rendre le tampon uniquement lorsque des modifications sont requises et copier les régions demandées dans OnPaint. – overslacked

+0

Hmm - c'était facile ;-) Merci pour votre aide, maintenant le redimensionnement fonctionne comme prévu. – dhh

2

Les événements de peinture ne demandent généralement pas de mise à jour pour l'ensemble du canevas, uniquement la zone spécifiée dans PaintEventArgs. Je suppose que ce qui se passe est que seules les zones nouvellement exposées de la toile sont passées dans PaintEventArgs.

L'une des raisons pour lesquelles vous ne devez effectuer aucun rendu dans l'événement Paint. Vous devez effectuer un rendu vers une image bitmap hors écran - un tampon - et copier à partir de ce tampon vers le canevas du contrôle dans l'événement Paint.

La recherche de "double buffering" ici ou sur Google vous donnera de nombreux exemples de la technique.

+0

Merci pour votre indice - J'ai trouvé des articles intéressants concernant le double tampon. Je vais jeter un coup d'oeil à ceux-ci. – dhh

Questions connexes