Animations: Coulissant & amp; Contrôle des évanouissements sur une forme C # (winforms)
Je suis en train de mettre en place un moyen d'animer (traduire, fade) contrôles (plus d'un en même temps peut-être) d'élégance. Par exemple, disons que j'avais une image dans le coin en haut à gauche, et une zone de texte dans le coin en bas à droite, je voudrais être en mesure de glisser en douceur à travers la fenêtre et changer de place. J'ai travaillé pendant un certain temps, mais n'ont pas trouvé quelque chose qui permet d'obtenir cette douceur ou facilement.
source d'informationauteur caesay
Vous devez vous connecter pour publier un commentaire.
découvrez le dot-net-transitions projet sur Google Code.Il y a maintenant un clone sur Github ici. Il est également disponible sur nuget commedot-net-transitions
. Il prend en charge une variété de systèmes linéaires/non-linéaires des transitions, y compris composite des transitions qui peuvent être utilisés pour des effets plus complexes tels que les ondulations.Ici est un exemple qui illustre votre comportement souhaité:
Je vous recommande de passer à WPF; ce serait beaucoup plus facile.
Il est totalement impossible pour estomper les contrôles en WinForms; les contrôles Windows ne peut pas avoir d'opacité.
Le plus proche que vous pouvez obtenir serait de rendre le contrôle et sa région sur le formulaire pour une paire de bitmaps, puis fondu enchaîné d'images bitmap dans un PictureBox à l'aide d'un ColorMatrix.
Glisser les contrôles en WinForms, vous pouvez utiliser une Minuterie pour changer progressivement l'
Top
et/ouLeft
propriétés des contrôles et de les déplacer sur la forme. Cependant, vous aurez une fâcheuse scintillement, ce qui est (à ma connaissance) impossible à enlever.Vous pourrait le faire en WinForms, avec beaucoup d'efforts, donc j'aurais à la deuxième, les recommandations pour l'utilisation de WPF (qui est essentiellement construit exactement pour ce genre de chose).
Votre principal obstacle à faire en WinForms est le fait qu'un contrôle de l'emplacement est indiqué par le nombre entier, ce qui signifie que vous ne pouvez pas définir un contrôle
Left
propriété45.3425
par exemple. De ce fait, fondamentalement, une animation fluide de contrôle (en supposant que vous souhaitez mouvement que les changements de vitesses et directions) complètement impossible, vous obtiendrez un incontournable saccade de mouvement de cette façon (j'ai essayé, donc je sais).Comme SLaks suggéré, le seul moyen de le faire dans WinForms serait de "faux" par des "instantanés" de chaque contrôle. Fondamentalement, vous devez commencer avec une Bitmap invisible à la taille de votre formulaire, dessinés avec du formulaire BackColor. Vous pouvez alors créer les "instantanés" en appelant DrawToBitmap() sur chaque commande que vous souhaitez animer, et de créer l'effet de mouvement par le dessin de la instantanés sur la toile (
System.Drawing
pouvez dessiner des images avec virgule flottante coordonnées, en évitant la saccade de l'entier emplacements).C'est trop de la merde, même si. Suffit d'utiliser WPF. 🙂
Edit: je dois mentionner qu'il est en fait facile faire quelque chose comme ceci dans WinForms, aussi longtemps que vous n'avez pas l'esprit à la recherche de terrible et saccadé et amateur. Mes commentaires ci-dessus se réfèrent à des difficultés de faire ce bien.
Enregistrer une copie de chacun des éléments de " valeurs x et y comme un float.
Utiliser un timer, et à chaque tick d'ajouter une valeur à la partie supérieure gauche de l'élément x et y de la position. Soustraire la même valeur en bas à droite de l'élément de x et de y.
Assurez-vous d'utiliser la mise en cache les valeurs flottantes ici, sinon vous risquez d'obtenir des erreurs d'arrondi lorsque l'élément est déplacé sur la forme.
Si vous êtes en train de peindre sur quelle que soit la surface que vous utilisez pour les images/contrôle, de l'invalider pour chaque tick.
Devrait être facile comme bonjour.
Edit:
Pour les contrôles transparents, découvrez Bob Powell Trucs & Astuces:
http://www.bobpowell.net/transcontrols.htm
Et ici, c'est sa propre réponse sur la façon de faire des semi-contrôles:
http://www.mofeel.net/67-microsoft-public-dotnet-framework-windowsforms-controls/4860.aspx
Je crois que cette réponse d'utiliser builtin AnimateWindow est beaucoup mieux pour ce but:
Comment puis-je ajouter des effets mobiles pour mes contrôles en C#?