Je développe actuellement une application C#. En ce moment j'essaye de réaliser un glisseur simple:Simple panneau-curseur en C#
|--------------------------|
| |
| |--------------------| |
| | | |
| | Panel1 | |
| | Panel2 | |
| | | |
| |--------------------| |
| x x x |
|--------------------------|
J'ai deux panneaux avec exactement la même taille. Panel1 est juste nécessaire pour afficher une bordure et définir les limites pour panel2 qui est ensuite dynamiquement échangé. Si le second x est cliqué, le panneau 2 devrait se déplacer vers la gauche et le panneau3 devrait venir de la droite et également se déplacer vers la gauche.
Fondamentalement, j'ai le code suivant:
Panel panel2 = panelArray[0];
Panel panel3 = panelArray[1];
Le code suivant doit maintenant effectuer la diapositive:
for (int i = 0; i <= 100; i++)
{
panel2.Location = new Point(panel2.Location.X - i, panel2.Location.Y);
System.Threading.Thread.Sleep(10);
}
for (int i = 0; i <= 100; i++)
{
panel3.Location = new Point(100 - i, panel3.Location.Y);
System.Threading.Thread.Sleep(10);
}
D'une certaine façon le premier panneau est coulissé-parfaitement, mais panel2 ne glisse. C'est juste affiché après l'exécution de la boucle.
Une idée de pourquoi panel2 n'effectue pas la diapositive? J'utilise WinForms.
Merci pour votre réponse, mais comment puis-je utiliser 'Timer' dans une boucle? Je veux dire que je dois en quelque sorte mettre en pause la boucle pour produire une diapositive lisse ... Peut-être que vous pourriez ajouter un court code coupé? Merci beaucoup! – libjup
La minuterie remplace la boucle - à chaque événement de minuterie vous déplacez d'un pas et quittez. La minuterie sera déclenchée par l'intervalle que vous spécifiez, vous donnant un mouvement à peu près aussi fluide qu'avec le délai que vous faites manuellement maintenant. – Lucero
Btw Application.DoEvents fonctionne bien;) il ne reste plus qu'un problème: le panneau a une taille de 800px; si je déplace panel2 je dois seulement le déplacer 100px vers la gauche. Mais si je laisse glisser panel3, il y a 800px à déplacer. Comment puis-je m'assurer que les deux diapositives sont faites à la même vitesse? J'ai déjà défini 'System.Threading.Thread.Sleep (1);' sur 1 mais il est toujours légèrement plus lent que le premier ... – libjup