2008-10-13 6 views
3

Débutant .NET ici ... Je voudrais créer un bouton dans un formulaire Windows qui affiche une progression ou un effet de "cooldown". Autrement dit, lorsque le bouton est pressé, il devient désactivé. Comme un événement ou une minuterie progresse, le bouton affiche la progression graphiquement. Lorsque la progression est terminée, le graphique se termine et le bouton est activé. Des effets similaires peuvent être observés dans de nombreux jeux.Bouton de progression pour Windows Forms

J'avais envisagé d'utiliser une combinaison de la classe Button intégrée et de la fonction GDI + DrawPath, mais la complexité est mal adaptée et j'ai le sentiment lancinant qu'il doit y avoir un moyen plus simple.

Des idées? Merci.

+0

Je ne voudrais pas aller la route gdi ... Avez-vous envisagé d'utiliser wpf? –

Répondre

0

Si vous avez vraiment besoin de l'avoir sur le bouton, je partirais avec un événement de peinture personnalisée.

quelque chose de similaire à:

button += new buttonPaintEvent(buttonPaintEventHandlerMethod); 
+0

@Underflow: Vous voulez élaborer votre solution en utilisant cette réponse? – Pat

1

L'approche la plus simple consiste à créer une instance du contrôle de la barre de progression, sans avoir à effectuer de codage/peinture personnalisée. Si vous avez vraiment besoin d'afficher tout à l'intérieur du bouton de contrôle, vous avez deux options. Vous pouvez continuer à changer la propriété Image du bouton ou aller tout le porc et effectuer une peinture personnalisée du bouton. La peinture personnalisée est assez simple, car vous n'avez besoin que de dessiner du texte plus l'image que vous voulez.

1

Une autre façon facile peut-être d'avoir deux contrôles, un bouton et une barre de progression qui occupent le même espace sur le formulaire. Lorsque l'utilisateur appuie sur le bouton, masquez le bouton et affichez la barre de progression. Mettez à jour la barre de progression au besoin jusqu'à ce que le traitement soit terminé. Ensuite, masquez la barre de progression et affichez le bouton à nouveau.