OVH Cloud OVH Cloud

Evenement imbriqué

4 réponses
Avatar
amplitude
Bonjour,

je cr=E9er des bouttons dans une boucle while (en suivant une bdd),=20
comment je dois g=E9r=E9 l'envenement du click pour qu'il me retourne une=
=20
valuer associ=E9 =E0 un bouton par exemple ??

merci de votre aide.

4 réponses

Avatar
Julien Bakmezdjian [MS]
Bonsoir,

Une idée (parmi certainement de nombreuses autres) :
Hériter le contrôle Bouton : par exemple MonBouton. Ajouter à MonBouton
une propriété public, par exemple un int MaValeur, qui correspond à la
valeur associée au bouton. Dans la boucle, s'abonner 'normalement' à
l'événement click. Tous les MonBouton auront la même méthode de callback,
par exemple MonBouton_Click.

Dans la méthode de callback, vous pouvez récupérer la valeur int par :
((MonBouton)sender).MaValeur

Cordialement,

Julien

"amplitude" a écrit dans le message de
news:40fe97cc$0$31404$
Bonjour,

je créer des bouttons dans une boucle while (en suivant une bdd),
comment je dois géré l'envenement du click pour qu'il me retourne une
valuer associé à un bouton par exemple ??

merci de votre aide.
Avatar
amplitude
Julien Bakmezdjian [MS] wrote:
Bonsoir,

Une idée (parmi certainement de nombreuses autres) :
Hériter le contrôle Bouton : par exemple MonBouton. Ajouter à MonBouton
une propriété public, par exemple un int MaValeur, qui correspond à la
valeur associée au bouton. Dans la boucle, s'abonner 'normalement' à
l'événement click. Tous les MonBouton auront la même méthode de callback,
par exemple MonBouton_Click.

Dans la méthode de callback, vous pouvez récupérer la valeur int par :
((MonBouton)sender).MaValeur




Arg, désolé mais je ne comprends pas... :-|

Est-il possible de me montrer dans un exemple de code ??

Voilà ce que j'ai :

foreach(DataRow row in dt.Rows)
{
HTClients.Add(i,row["id"].ToString());
// Affichage du panel
this.label2 = new System.Windows.Forms.Label();
this.label2.Anchor =
((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles. Top
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.label2.BackColor = System.Drawing.SystemColors.ControlDarkDar k;
this.label2.ImageAlign = System.Drawing.ContentAlignment.MiddleLef t;
this.label2.Location = new System.Drawing.Point(0, 4+(i*PanelHeigh t));
this.label2.Name = "label"+i;
this.label2.Size = new System.Drawing.Size(170, PanelHeight);
this.label2.TabIndex = 0+i;
string LeNom = row["nom"].ToString().ToUpper();
if(LeNom.Length > 20)
{
LeNom = LeNom.Substring(0,20)+"...";
}
this.label2.Text = " "+LeNom;
this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft ;

this.PanelClients.Controls.Add(this.label2);

i++;
}

Voilà ma boucle...
Avatar
Julien Bakmezdjian [MS]
Bonjour,

Voici un exemple :


private MonBouton[] mesBoutons;

private void CreateButtons()
{
int nbBoutons = 10;
mesBoutons = new MonBouton[nbBoutons];

for(int i=0;i < nbBoutons; i++)
{
mesBoutons[i] = new MonBouton(i);
mesBoutons[i].Text = "...";
mesBoutons[i].Location = new Point(50, 20 * i);
mesBoutons[i].Size = new Size(50,15);
mesBoutons[i].Text = "...";
mesBoutons[i].Click +=new EventHandler(MonBouton_Click);
this.Controls.Add(mesBoutons[i]);
}
}

class MonBouton : Button
{
public int MaValeur;
public MonBouton(int val)
{
MaValeur = val;
}
}

private void MonBouton_Click(object sender, EventArgs e)
{
int valeurDuBoutonClique = ((MonBouton)sender).MaValeur;
MessageBox.Show(valeurDuBoutonClique.ToString());
}




Cordialement,

Julien

"amplitude" a écrit dans le message de
news:40fea473$0$31414$
Julien Bakmezdjian [MS] wrote:
Bonsoir,

Une idée (parmi certainement de nombreuses autres) :
Hériter le contrôle Bouton : par exemple MonBouton. Ajouter à


MonBouton
une propriété public, par exemple un int MaValeur, qui correspond à la
valeur associée au bouton. Dans la boucle, s'abonner 'normalement' à
l'événement click. Tous les MonBouton auront la même méthode de callback,
par exemple MonBouton_Click.

Dans la méthode de callback, vous pouvez récupérer la valeur int par :
((MonBouton)sender).MaValeur




Arg, désolé mais je ne comprends pas... :-|

Est-il possible de me montrer dans un exemple de code ??

Voilà ce que j'ai :

foreach(DataRow row in dt.Rows)
{
HTClients.Add(i,row["id"].ToString());
// Affichage du panel
this.label2 = new System.Windows.Forms.Label();
this.label2.Anchor ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.label2.BackColor = System.Drawing.SystemColors.ControlDarkDark;
this.label2.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.label2.Location = new System.Drawing.Point(0, 4+(i*PanelHeight));
this.label2.Name = "label"+i;
this.label2.Size = new System.Drawing.Size(170, PanelHeight);
this.label2.TabIndex = 0+i;
string LeNom = row["nom"].ToString().ToUpper();
if(LeNom.Length > 20)
{
LeNom = LeNom.Substring(0,20)+"...";
}
this.label2.Text = " "+LeNom;
this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;

this.PanelClients.Controls.Add(this.label2);

i++;
}

Voilà ma boucle...
Avatar
amplitude
Julien Bakmezdjian [MS] wrote:
Bonjour,

Voici un exemple :





Je vais tester ça, merci bcp ! :)))