begin process at 2012 02 08 05:13:42
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Astuces

 > THREAD, COMPOSANTS DYNAMIQUES, ASTUCES DE WINFORM

THREAD, COMPOSANTS DYNAMIQUES, ASTUCES DE WINFORM




 Description

Cliquez pour voir la capture en taille normale
C'est un petit Soft qui permet d'obtenir un effet d'alpha sur des boutons. J'ai utiliser des thread pour réaliser l'effet et quelque petit manipulation d'évènements et de composants.

Pratique pour comprendre les thread et donc le multi-tâche ainsi que les objets dynamiques.

Source

  • // Source de la classe CreateButon
  • using System;
  • using System.Collections.Generic;
  • using System.ComponentModel;
  • using System.Drawing;
  • using System.Text;
  • using System.Windows.Forms;
  • using System.Threading;
  • namespace WindowsApplication1
  • {
  • class CreateButton
  • {
  • private int Largeur; // Largeur Bouton
  • private int Hauteur; // Hauteur Bouton
  • private int PositionX; // Position de départ X du bouton
  • private int PositionY; // Position de départ Y du bouton
  • private int Espacement; // Espacement entre les boutons
  • private int NombreDeBoutons; // Le nombre de boutons que l'on veut créer
  • // L'effet est plus beau quand la couleur de fond et le blanc et
  • // la couleur de fond de l'effet une couleur foncée
  • private Color CouleurFond; // Couleur de fond de base du bouton
  • private Color CouleurFondEffet; // Couleur de fond de l'effet du bouton
  • private Color CouleurTexte; // Couleur du texte de base du bouton
  • private Color CouleurTexteEffet; // Couleur du texte de l'effet du bouton
  • private int VitesseEffet; // Vitesse de l'effet
  • private int Decrement; // Le pas à pas de l'alpha
  • string NomBouton; // Le nom du bouton
  • string TexteBouton; // Le texte du bouton
  • Form FormParent; // La form sur la quelle on veut afficher les boutons
  • EventHandler CliqueSurBouton; // L'évènements des boutons
  • public CreateButton(int largeur, int hauteur, int positionX, int positionY, int espacement, int nombreDeBoutons, Color couleurFond, Color couleurTexte, Color couleurFondEffet, Color couleurTexteEffet, int vitesseEffet, string nomBouton, string texteBouton, Form formulaireParent, EventHandler cliqueSurBouton)
  • {
  • // Récupération des paramètres du constructeur
  • Largeur = largeur;
  • Hauteur = hauteur;
  • PositionX = positionX;
  • PositionY = positionY;
  • Espacement = espacement;
  • CouleurFond = couleurFond;
  • CouleurFondEffet = couleurFondEffet;
  • CouleurTexte = couleurTexte;
  • CouleurTexteEffet = couleurTexteEffet;
  • VitesseEffet = vitesseEffet;
  • Decrement = 30;
  • NomBouton = nomBouton;
  • TexteBouton = texteBouton;
  • FormParent = formulaireParent;
  • CliqueSurBouton = cliqueSurBouton;
  • NombreDeBoutons = nombreDeBoutons;
  • }
  • public void Creer()
  • {
  • // On crée les boutons et on les ajoutes à la form qu'on
  • // a passé en paramètres
  • for (int i = 0; i < NombreDeBoutons; i++)
  • {
  • Button LeBouton = new Button();
  • LeBouton.FlatStyle = System.Windows.Forms.FlatStyle.Popup;
  • LeBouton.Size = new System.Drawing.Size(Largeur, Hauteur);
  • LeBouton.Location = new System.Drawing.Point(PositionX, ((Hauteur + Espacement) * i) + PositionY);
  • LeBouton.Name = NomBouton + i;
  • LeBouton.TabIndex = 0;
  • LeBouton.Text = TexteBouton + " " + (i + 1);
  • LeBouton.BackColor = CouleurFond;
  • LeBouton.ForeColor = CouleurTexte;
  • LeBouton.MouseLeave += new System.EventHandler(this.button_MouseLeave);
  • LeBouton.Click += new System.EventHandler(CliqueSurBouton);
  • LeBouton.MouseEnter += new System.EventHandler(this.button_MouseEnter);
  • FormParent.Controls.Add(LeBouton);
  • }
  • }
  • private void button_MouseEnter(object sender, EventArgs e)
  • {
  • Button Bouton = (Button)sender; // On récupère le bouton
  • ChangeAlpha(Bouton, 255); // Appel de la méthode qui permet de changer la couleur et l'alpha
  • Bouton.ForeColor = CouleurTexteEffet; // On Change la couleur du texte du bouton
  • }
  • private void button_MouseLeave(object sender, EventArgs e)
  • {
  • Button btnSelect = (Button)sender; // On récupère le bouton
  • // On instancie un nouveau thread pour pas freezer la form au
  • // de l'application de l'effet.
  • // ParameterizedThreadStart permet de passer un paramètre au moment
  • // de l'appel de la méthide Start
  • // Effet est la tâche que l'on veut appeler
  • Thread tr = new Thread(new ParameterizedThreadStart(Effet));
  • tr.Start(sender); // Appel de la tâche
  • }
  • private void Effet(object sender)
  • {
  • // sender est le paramètre que l'on passe. Dans notre cas
  • // le bouton
  • Button btnSelect = (Button)sender; // On récupère le bouton
  • btnSelect.ForeColor = CouleurTexteEffet; // Change la couleur du texte
  • for (int i = 255; i >= 0; i -= Decrement) // Boucle qui va décrémenter l'alpha
  • {
  • ChangeAlpha(btnSelect, i); // Appel de la méthode qui permet de changer la couleur et l'alpha
  • Thread.Sleep(VitesseEffet); // On attend un petit coup
  • }
  • btnSelect.ForeColor = CouleurTexte; // On remet la bonne couleur de texte
  • btnSelect.BackColor = CouleurFond; // On remet la bonne couleur de fond
  • }
  • private void ChangeAlpha(object sender, int alpha)
  • {
  • Button btnSelect = (Button)sender; // On récupère le bouton
  • // On défini la nouvelle couleur avec l'alpha qui diminue
  • btnSelect.BackColor = Color.FromArgb(alpha, CouleurFondEffet.R, CouleurFondEffet.G, CouleurFondEffet.B);
  • }
  • }
  • }
// Source de la classe CreateButon

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace WindowsApplication1
{
    class CreateButton
    {
        private int Largeur; // Largeur Bouton
        private int Hauteur; // Hauteur Bouton
        private int PositionX; // Position de départ X du bouton
        private int PositionY; // Position de départ Y du bouton
        private int Espacement; // Espacement entre les boutons
        private int NombreDeBoutons; // Le nombre de boutons que l'on veut créer

        // L'effet est plus beau quand la couleur de fond et le blanc et
        // la couleur de fond de l'effet une couleur foncée
        private Color CouleurFond; // Couleur de fond de base du bouton
        private Color CouleurFondEffet; // Couleur de fond de l'effet du bouton
        private Color CouleurTexte; // Couleur du texte de base du bouton
        private Color CouleurTexteEffet; // Couleur du texte de l'effet du bouton

        private int VitesseEffet; // Vitesse de l'effet
        private int Decrement; // Le pas à pas de l'alpha

        string NomBouton; // Le nom du bouton
        string TexteBouton; // Le texte du bouton

        Form FormParent; // La form sur la quelle on veut afficher les boutons

        EventHandler CliqueSurBouton; // L'évènements des boutons

        public CreateButton(int largeur, int hauteur, int positionX, int positionY, int espacement, int nombreDeBoutons, Color couleurFond, Color couleurTexte, Color couleurFondEffet, Color couleurTexteEffet, int vitesseEffet, string nomBouton, string texteBouton, Form formulaireParent, EventHandler cliqueSurBouton)
        {
            // Récupération des paramètres du constructeur
            Largeur = largeur;
            Hauteur = hauteur;
            PositionX = positionX;
            PositionY = positionY;
            Espacement = espacement;
            CouleurFond = couleurFond;
            CouleurFondEffet = couleurFondEffet;
            CouleurTexte = couleurTexte;
            CouleurTexteEffet = couleurTexteEffet;
            VitesseEffet = vitesseEffet;
            Decrement = 30;
            NomBouton = nomBouton;
            TexteBouton = texteBouton;
            FormParent = formulaireParent;
            CliqueSurBouton = cliqueSurBouton;
            NombreDeBoutons = nombreDeBoutons;
        }
        public void Creer()
        {
            // On crée les boutons et on les ajoutes à la form qu'on
            // a passé en paramètres
            for (int i = 0; i < NombreDeBoutons; i++) 
            {
                Button LeBouton = new Button();
                LeBouton.FlatStyle = System.Windows.Forms.FlatStyle.Popup;
                LeBouton.Size = new System.Drawing.Size(Largeur, Hauteur);
                LeBouton.Location = new System.Drawing.Point(PositionX, ((Hauteur + Espacement) * i) + PositionY);
                LeBouton.Name = NomBouton + i;
                LeBouton.TabIndex = 0;
                LeBouton.Text = TexteBouton + " " + (i + 1);
                LeBouton.BackColor = CouleurFond;
                LeBouton.ForeColor = CouleurTexte;
                LeBouton.MouseLeave += new System.EventHandler(this.button_MouseLeave);
                LeBouton.Click += new System.EventHandler(CliqueSurBouton);
                LeBouton.MouseEnter += new System.EventHandler(this.button_MouseEnter);
                FormParent.Controls.Add(LeBouton);
            }
        }
        private void button_MouseEnter(object sender, EventArgs e)
        {
            Button Bouton = (Button)sender; // On récupère le bouton
            ChangeAlpha(Bouton, 255); // Appel de la méthode qui permet de changer la couleur et l'alpha
            Bouton.ForeColor = CouleurTexteEffet; // On Change la couleur du texte du bouton
        }
        private void button_MouseLeave(object sender, EventArgs e)
        {
            Button btnSelect = (Button)sender; // On récupère le bouton
            // On instancie un nouveau thread pour pas freezer la form au
            // de l'application de l'effet.
            // ParameterizedThreadStart permet de passer un paramètre au moment
            // de l'appel de la méthide Start
            // Effet est la tâche que l'on veut appeler
            Thread tr = new Thread(new ParameterizedThreadStart(Effet));
            tr.Start(sender); // Appel de la tâche
        }
        private void Effet(object sender)
        {
            // sender est le paramètre que l'on passe. Dans notre cas
            // le bouton
            Button btnSelect = (Button)sender; // On récupère le bouton
            btnSelect.ForeColor = CouleurTexteEffet; // Change la couleur du texte
            for (int i = 255; i >= 0; i -= Decrement) // Boucle qui va décrémenter l'alpha
            {
                ChangeAlpha(btnSelect, i); // Appel de la méthode qui permet de changer la couleur et l'alpha
                Thread.Sleep(VitesseEffet); // On attend un petit coup
            }
            btnSelect.ForeColor = CouleurTexte; // On remet la bonne couleur de texte
            btnSelect.BackColor = CouleurFond; // On remet la bonne couleur de fond
        }
        private void ChangeAlpha(object sender, int alpha)
        {
            Button btnSelect = (Button)sender; // On récupère le bouton
            // On défini la nouvelle couleur avec l'alpha qui diminue
            btnSelect.BackColor = Color.FromArgb(alpha, CouleurFondEffet.R, CouleurFondEffet.G, CouleurFondEffet.B);
        }
    }
}

 Conclusion

L'effet n'est pas super si on bouge rapidement la souris. Si vous réussissez à l'optimiser je suis prenant.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip Source avec une capture Source .NET (Dotnet) BACKGROUNDWORKER
Source avec Zip Source avec une capture Source .NET (Dotnet) GDI GRAPHICS DEVICE INTERFACE

 Sources de la même categorie

Source avec Zip Source .NET (Dotnet) DIFFÉRENTIELLE ENTRE DEUX COLLECTION par morphey_83
Source avec Zip Source avec une capture Source .NET (Dotnet) RICHTEXTBOX POUR COLORATION SYNTAXIQUE EN TEMPS REEL par Renfield
Source avec Zip Source avec une capture Source .NET (Dotnet) TRANSFORMER UN PROGRAMME EN SERVICE par xavh44
Source avec Zip Source .NET (Dotnet) [C# ET T4] TEMPLATE DE VIEW MODEL POUR LE PATTERN MVVM par Kite37
Source .NET (Dotnet) EXEMPLE D'UTILISATION D'UN OCX SANS DECLARATION PREALABLE DA... par yohan49

 Sources en rapport avec celle ci

Source avec Zip Source .NET (Dotnet) AFFICHAGE DE VALEUR PROVENANT D'U THREAD DANS UN FORMULAIRE par Nyuki
Source avec Zip Source avec une capture Source .NET (Dotnet) CONTRÔLES : BOUTON, LISTE ET PANNEAU POUR VOS APPLIS par Mokost
Source avec Zip SILVERLIGHT 4: BOUTON À 3 IMAGES par BumpMANN
Source avec Zip Source avec une capture Source .NET (Dotnet) COMPOSANT DE TYPE VOYANT/LED par thebigboss
Source avec Zip Source avec une capture Source .NET (Dotnet) COMPOSANT BOUTONS AVEC REFLETS par yodaben

Commentaires et avis

Commentaire de Nikoui le 20/12/2007 19:31:33

L'effet est plutôt sympa, par contre c'est dommage d'avoir codé ça dans une seul classe, faite uniquement pour afficher ce que tu montres dans ton application "démo". Cela aurai été plus interressant de proposer un controle "Button" réalisant cet effet alpha.

Commentaire de dadamagouil le 21/12/2007 19:43:38

Ouai t'as raison un bouton avec déjà toutes ces options ce serait super. J'y avais pas penser. Merci pour le conseil. T'aurais gérer comment l'effet entre plusieurs bouton ? Parce que l'effet dépend d'un certain nombre de boutons donc il y aurait fallut ajouter du code dans le formulaire, pas super. Tu vois une autre technique ???

Commentaire de Nikoui le 21/12/2007 21:45:06

Ben pour moi chaque bouton peut être autonome : lorsqu'il perd le focus, tu lance l'effet graphique (peut importe qu'il y ai d'autres boutons ou pas)

Commentaire de dadamagouil le 22/12/2007 16:11:32

Ouai c'est vrai. Bon je pense que après libre à n'importe qui de faire n'importe quoi.

Commentaire de Julien237 le 24/12/2007 08:52:49

Ou bien alors tu ajoute une propriété de déphasage sur ton bouton, et lorsque l'utilisateur les crée, il configure ce déphasage comme il le veut.
Le bouton s'anime en suite selon un temps de référence (DateTime.Now par exemple) + le déphasage.

Commentaire de dadamagouil le 27/12/2007 13:46:04

Oui ça peut être pas mal ça.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Evenement sur un bouton dynamique [ par matlocker ] bonjour,Je suis tout nouveau en c# et je veux gerer evenement click sur un bouton cr&#233;&#233; dynamiquement. Mais comment faire ?Je declare mon bou Composant button [ par scortex84 ] Bonjour,Je souhaite créer un composant "bouton" personalisé avec par défaut un type flat, une image, et une couleur bien spécifique. Tout ceci pour m' Exécution Dynamique [ par tmcuh ] Bonjour suite à un projet j'aurais aimé connaitre la meilleur technique pour exécuter du code dynamiquement. J'ai trouvé un bout de code me permettan Ajouter un composant en clickant sur un bouton [ par ravomavain ] Bonjour à tous,J'aimerais ajouter une imge quand on click sur un bouton mias que l'on puisse en ajjouter à l'infinie.Quelequ'un pourait-il m'aiderMerc bouton police dynamique [ par elfourbos ] Bonjour,J'ai appris directement la programmation par le technique et maintenant jme rend compte que les petites broutilles sont aussi dur que les gran Rotation de bouton [ par LordBob ] Bonsoir a tous,voila en fait je cherche un composant pour mon application mais étant donnée que je ne le trouve pas, je poste un message dans le forum générer un contrôle ( bouton) dynamique en c# [ par poelvo ] Je voudrais créer des boutons à partir d'une liste d'objet d'une base de données, je n'aurai donc jamais le même nombre de boutons. Je ne sais donc pa toolbar et menu [ par kakol ] Juste un petit probleme.J'ai un menu et une toolbar. Un des elements de mon menu correspond au bouton d'index 2 de ma toolbar, auquel est associe une thread dynamique (a la volée) [ par metos ] salut à tout le monde,est-il possible de créer des thread dynamiquement. en fait j'aurais besoin de créer plusieurs thread identiques mais je ne sais [Threads] Stopper un thread via un control [ par littlekenny ] Salut,M'étant  basé sur l'article de MorpionMx (Opérations cross-threads - utilisation des délégations synchrones / asynchrones), j'aimerais fermer mo


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,577 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales