Pour ceux que ne savent pas ce que sont les WinForms, ce sont tout simplement les bibliothèques graphiques du framework .NET pour gérer et afficher des fenêtres.
Les WinForms sont vraiment très simples et pratiques à utiliser, surtout avec l'éditeur de Visual Studio qui nous permet de gérer l'apparence des fenêtres sans toucher au code, le plus simplement du monde, en glissant/déposant les contrôles qu'on veut et en changeant leurs propriétés.

Cependant, les WinForms ont un grand défaut lorsqu'on fait des applications avec beaucoup (mais pas tant que ça) de contrôles à afficher : elles sont lentes. On peut donc apercevoir un scintillement très désagréable lors du redimensionnement de la fenêtre, ou toute autre opération nécessitant le redessin de la fenêtre par exemple.
Il existe cependant quelques techniques pour éviter ce scintillement, allant de l'utilisation du Double buffering (dessin de la fenêtre dans un buffer caché pendant que l'autre buffer est affiché à l'écran, ce qui permet d'avoir toujours un buffer fini à afficher) jusqu'à des techniques bien plus complexes interceptant des messages Windows ou modifiant des propriétés de la fenêtre à bas niveau.

L'utilisation de ces techniques permet bien souvent de régler les problèmes de scintillement de la fenêtre, mais il existe une grosse exception à la règle : le panel !
Le panel est un contrôle simple, servant de conteneur pour d'autres contrôles et de zone d'affichage pour ces contrôles. Un panel pourrait donc en théorie être considéré comme une fenêtre dans une fenêtre, sauf que le panel n'a pas de bordure comme une fenêtre classique et qu'il est intégré directement dans le dessin de la fenêtre.

Je disais en théorie car en pratique il y a une grosse différence entre les fenêtres et les panels : les panels n'ont pas de Double Buffering ! Ainsi, quand vous avez des problèmes de scintillement à cause d'un trop grand nombre de contrôles et que ces contrôles ou une partie d'entres eux sont dans un panel vous aurez toujours vos problèmes de scintillement !
La technique dans ce cas là est simple : n'utilisez pas de panel ! A la place, soit vous les mettez directement dans la fenêtre, ou alors vous pouvez toujours créer un contrôle utilisateur qui, soit dit en passant, peut être plus facilement considéré comme étant une fenêtre qu'un panel ne pourrait l'être, car il gère le Double Buffering.

C'est donc après plusieurs heures de recherche que j'ai trouvé que la cause de mon problème de scintillement venait de l'utilisation d'un panel ...
Je ne suis pas prêt d'en réutiliser ...

Lire la suite ...