Salut Tymmesyde,
Tout d'abord chapeau pour le changement d'environnement de développement. J'aurais au moins réussi à te faire changer d'avis pour cette nouvelle année..lool
Bon parlons peu et bien :
Ton code source n'est pas refactorisé. Je veux dire par là que si tu fais l'inventaire de tes controles et fonctions dans ton projet tu vas aisément pouvoir réduire significativement les lignes de code ainsi que la consommation de resources de ton appli (si petit projet qu'il soit, un jour peut-être ils seront plus grands
):
Refactoriser un code c'est quoi : c'est analyser les redondances dans les controles et les méthodes associées afin de trouver une solution pour réduire les lignes de code tapées et ainsi augmenter la disponibilité d'espace mémoire pour le système.
Donc nous avons :
- 7 boutons avec le meme appel vers 1 DialogColorBox mais un retour de réponse vers 1 label différent
La solution est la suivante pour refactoriser tout tes gestionnaires d'évènement" Button" afin de n'en créé qu'un seul qui gèrera l'ensemble de tes boutons :
1- Tu poses tout tes controles sur ton formulaire principal. Commences par les label (de 1 à huit) qui accueilleront tes valeurs de retour
2- Poses "respectivement" en face de ces labels les boutons (de 1 à huit) qui appel la classe Colordialog
3- Paramètre la proriété "Tag" de chaque bouton de facon qu'ils aient le nom du label se trouvant en face ex:
Button1.tag = Label1
Button2.tag = Label2
...etc...)
4- Poses le reste de tes controles
5- ne cliques sur aucun bouton et accèdes à la partie code (afficher le code) en cliquant droit sur ton Formulaire principal (Form1)
6- Ajoute après l'initializeComponents les gestionnaires d'évènement de tous tes boutons mais la seule variante c'est qu'ils vont renvoyer les appels vers le gestionnaire "Button1" :
- Code:
-
this.button1.Click += new System.EventHandler(this.button1_Click);
this.button2.Click += new System.EventHandler(this.button1_Click);
//etc.....
7- Retourne en concepteur de vue et doubles cliques sr le bouton1 pour générer le gestoinnaire d'évènement (je le fais dans ce sens car sinon l'EDI aurait créé le gestionnaire dans le ".designer")
8- Voilà ce que tu vas copier :
- Code:
-
Button btn = sender as Button;
ColorDialog dialog = new ColorDialog { Color = btn.BackColor };
if ((dialog.ShowDialog(this) == DialogResult.OK))
{
btn.BackColor = dialog.Color;
string nam = System.Convert.ToString(btn.Tag);
Control ctn = this.Controls[nam];
ctn.Text = string.Concat(new object[] { dialog.Color.R, " ", dialog.Color.G, " ", dialog.Color.B });
}
Pour expliquer succinctement le code :
--> sender est le contrôle qui a envoyé le message donc on le cast (convertie en objet Bouton) pour l'utiliser afin de :
- paramétrer la propriété : backcolor
- récupérer la valeur de la propriété "Tag"
--> Control ctn = this.Controls[nam];
Je recherche un objet parmi tous les controles du formulaire suivant le nom
--> J'affecte le nom de la couleur RGB au controle Label associé au bouton
Voilà ce que ca donne avec 2 boutons et 2 labels :
- Code:
-
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.button1.Click += new System.EventHandler(this.button1_Click);
this.button2.Click += new System.EventHandler(this.button1_Click);
}
private void button1_Click(object sender, EventArgs e)
{
Button btn = sender as Button;
ColorDialog dialog = new ColorDialog { Color = btn.BackColor };
if ((dialog.ShowDialog(this) == DialogResult.OK))
{
btn.BackColor = dialog.Color;
string nam = System.Convert.ToString(btn.Tag);
Control ctn = this.Controls[nam];
ctn.Text = string.Concat(new object[] { dialog.Color.R, " ", dialog.Color.G, " ", dialog.Color.B });
}
}
}
Voilà j'expère que c'était pas trop difficile.
Mais ce qu'il faut retenir : il faut toujours trouver des lignes de codes similaires et voir s'il n'y a pas besoin de les refactoriser. C'est comme les mathématiques la factorisation !
A+