J'ai écrit une application Windows Forms pour résoudre les puzzles Shikaku. À l'heure actuelle, la grille de puzzle est dessinée sur un panneau dans la fenêtre principale de l'application en utilisant un PaintEventHandler. La méthode appelée par PaintEventHandler redessine la grille entière à chaque fois qu'elle est appelée. Bien que cette approche fonctionne, c'est flickery et inefficace, et je voudrais le remplacer par quelque chose de plus lisse.Existe-t-il un analogue à QCanvas de Qt dans Windows Forms?
J'ai écrit un certain nombre d'applications similaires dans Qt. Avec Qt, je créerais un QCanvas et un QCanvasView. Je peux ensuite ajouter des objets au QCanvas ou en retirer des objets et appeler la méthode update()
sur QCanvasView pour voir les changements prendre effet sans scintillement.
Une approche alternative que j'ai essayée était de garder une référence à l'objet Graphics
utilisé pour peindre le panneau et essayer de dessiner dessus en dehors d'un événement Paint. Cela n'a pas fonctionné: j'ai obtenu une exception plutôt inutile ArgumentException: Parameter is not valid
, que je peux seulement supposer avoir été lancée par Windows parce qu'elle ne s'attendait pas à ce que l'application fasse de la peinture à ce moment-là.
Existe-t-il quelque chose de similaire à un QCanvas pour Windows Forms? Si non, quelle approche dois-je utiliser pour mettre à jour la grille de puzzle?
Merci pour votre réponse utile, vous m'avez donné quelques idées à explorer. Je prendrai un autre coup d'oeil plus tard cette semaine et j'accepterai votre réponse si tout fonctionne :). –
J'utilise maintenant DoubleBuffered et je restreigne la zone de redessin au rectangle du clip dans l'événement Paint, et cela fonctionne beaucoup mieux maintenant. C'est un peu plus de travail qu'avec Qt. Cela me rappelle aussi écrire le code de redessiner la fenêtre dans RISC OS - les jours heureux! :) Merci encore. –