2010-07-30 13 views
0

J'ai créé un jeu de cartes construit avec des images. Les cases vides dans lesquelles une carte peut être placée sont une boîte vide avec un fond transparent et une bordure 3D. Et puis j'ai une carte actuelle qui est aussi une image qui est déplacée par un événement MouseMove.Les images transparentes clignotent lorsqu'elles sont déplacées avec la souris

Dès que je fais glisser une carte sur les PictureBox transparents, il y a une carte à gauche partout où la carte a été jusqu'à ce que j'arrête la souris et que je la laisse rafraîchir. C'est également le cas lorsque l'arrière-plan de la carte actuelle est transparent même si une carte est définie comme étant l'image (cela n'a donc pas vraiment d'importance car elle disparaît si je mets l'arrière-plan au vert).

Y a-t-il une solution de contournement pour cela? J'ai essayé DoubleBuffered mais sans succès. Merci!

Répondre

1

Votre description ne précise pas à quoi ressemble votre code. Mais il règle le prochain problème après avoir résolu celui-ci: les effets de transparence pour les contrôles ne fonctionnent pas dans Windows Forms lorsque les contrôles se chevauchent. Vous verrez l'arrière-plan du parent, vous ne verrez pas le contenu de la zone d'image qui est chevauchée par votre carte en mouvement.

Ce n'est pas un problème avec WPF, il a un modèle de rendu très différent. Mais tant que vous voulez rester avec Windows Forms, vous devez le faire fonctionner avec l'événement OnPaint() du formulaire. Dessinez la table des cartes, puis le stock, puis dessinez la carte en mouvement. Lorsque la carte se déplace, appelez Invalidate() pour forcer le formulaire à être repeint, montrant maintenant la carte dans sa nouvelle position. En d'autres termes, ne résolvez pas votre problème actuel.

Refonte de votre programme.

+0

Merci, cela semble être une bonne idée. Le problème est que je suce WPF et ne sais pas comment faire les choses comme les images draggables etc –

+0

Vous pouvez le faire fonctionner en winforms, mais pas avec des boîtes d'image. –

0

vous pouvez appeler

Application.DoEvents(); 

dans pictureBox.Move événements; donc toutes les images d'arrière-plan se redessineront.

+0

Merci, fait mieux, mais pas bon. Toujours scintille et quand je relâche la souris l'image se fige parfois –