Accueil > > > THREAD, COMPOSANTS DYNAMIQUES, ASTUCES DE WINFORM
THREAD, COMPOSANTS DYNAMIQUES, ASTUCES DE WINFORM
Information sur la source
Description
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.
Sources du même auteur
Sources de la même categorie
Commentaires et avis
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éé 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
|
Derniers Blogs
TECHDAYS PARIS 2012 : COMMENT SHAREPOINT A SAUVé MES TECHDAYSTECHDAYS PARIS 2012 : COMMENT SHAREPOINT A SAUVé MES TECHDAYS par ROMELARD Fabrice
Speakers : Lionel Limozin et Alain Marty La session commence par une découverte de SharePoint à travers la mise en place d'un environnement SharePoint pour la gestion des Sessions animées par BeWise. Le besoin est très ba...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice PERSPECTIVE 3.0 POUR SILVERLIGHT 5.0PERSPECTIVE 3.0 POUR SILVERLIGHT 5.0 par odewit
Je viens de publier la version 3.0 de Perspective pour Silverlight, qui regroupe un portage sous Silverlight 5.0 des fonctionnalités de Perspective 2.0, le framework 3D de haut-niveau introduit récemment et de nouveaux exemples de code. En voici la li...
Cliquez pour lire la suite de l'article par odewit TECHDAYS PARIS 2012 : TOP 10 DES BEST PRACTICES POUR SQL SERVERTECHDAYS PARIS 2012 : TOP 10 DES BEST PRACTICES POUR SQL SERVER par ROMELARD Fabrice
Speaker : Nadia Ben El Kadi Configuration machine La session commence par la toute première question à se poser lors de la mise en place d'environnement SQL Server, la configuration des machines : Type de mac...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : KINECT + OFFICE 365 UN BON GESTE POUR VOTRE SITECHDAYS PARIS 2012 : KINECT + OFFICE 365 UN BON GESTE POUR VOTRE SI par ROMELARD Fabrice
Speakers : Fabrice Barbin, Samuel Blanchard, Julien Lo Presti Titre Prometteur et attractif invitant à voir comment lier le composant ludique Kinect dans le cadre d'une structure IT classique, notamment au travers de la plat...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : PLEINIèRE DU PREMIER JOURTECHDAYS PARIS 2012 : PLEINIèRE DU PREMIER JOUR par ROMELARD Fabrice
KeyNotes du premier jour pour les développeurs. La session est principalement axée sur une des principales directions prise par Microsoft à travers tous ses nouveaux produits : Cloud privé ou public (Solution Azure) ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|