Appel d'une procédure événement Click dans une procédure exécutée lors d'un Clic

Signaler
Messages postés
6
Date d'inscription
dimanche 8 mai 2011
Statut
Membre
Dernière intervention
28 juin 2011
-
Messages postés
14995
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
2 novembre 2020
-
Bonjour tout le monde et merci d'avance pour votre aide
Comme énoncé dans l'intitulé, je n'arrive pas a faire appel à une procedure evenement Click d'un bouton se trouvant deja dans une procedure executée lors d'un Click d'un autre bouton. J'ai testé deux methodes :
private void Proc_click_btn_ajout_user(object sender, EventArgs e) //Procédure executée lors du clic sur bouton ajout user
        {
            

            foreach (string user_temp in list_ajout_user)
            {
                ListBox_ajout_user.Items.Add(user_temp);

                string[] var_user_selectionne =  user_temp.Split(sep); //découpage de la chaine avec le séparateur &
                user = var_user_selectionne[0];
                droit = var_user_selectionne[1];

                btn_suppr_user = new System.Web.UI.WebControls.Button();
                btn_suppr_user.Text = "Suppr";
                btn_suppr_user.ID = user + "&" + droit;                                                             
                 Proc_click_btn_suppr_user(btn_ajout_user, e); 
                this.Controls.Add(new LiteralControl("<tr><td> " + user + "</td><td> " + droit + "</td><td> "));
                this.Controls.Add(btn_suppr_user);
                lab_bienvenu.Text + = btn_suppr_user.ID;
                
            }          
          
        }


        private void Proc_click_btn_suppr_user(object sender, EventArgs e) //Procédure executée lors du clic sur bouton suppr user
        
{
            
            lab_bienvenu.Visible =  false;  // test pour verifier si mon code est bien executer et si l'apelle de la procedure fonctionne en cachant un label par ex.         
           
        }

et aussi

 private void Proc_click_btn_ajout_user(object sender, EventArgs e) //Procédure executée lors du clic sur bouton ajout user 
        {
            

            foreach (string user_temp in list_ajout_user)
            {
                ListBox_ajout_user.Items.Add(user_temp);

                string[] var_user_selectionne  = user_temp.Split(sep); //découpage de la chaine avec le séparateur &
                user =  var_user_selectionne[0];
                droit = var_user_selectionne[1];

                btn_suppr_user = new System.Web.UI.WebControls.Button();
                btn_suppr_user.Text = "Suppr";
                btn_suppr_user.ID = user + "&" + droit;                                                             
                 btn_suppr_user.Click += new system.EventHandler(this.Proc_click_btn_suppr_user); //appel de la procédure Proc_click_btn_visible lors du click sur un bouton 
                this.Controls.Add(new LiteralControl("<tr><td> " + user + "</td><td> " + droit + "</td><td> "));
                this.Controls.Add(btn_suppr_user);
                lab_bienvenu.Text + = btn_suppr_user.ID;
                
            }          
          
        }


        private void Proc_click_btn_suppr_user(object sender, EventArgs e) //Procédure executée lors du clic sur bouton ajout user
        
{
            
            lab_bienvenu.Visible = false;  // test pour verifier si mon code est bien executer et si l'apelle de la procedure fonctionne en cachant un label par ex.         
           
        }


La procédure est bien appelée et exécuté lorsque j'utilise la premiere methode mais dès que je clique sur mon bouton ajouté. Pour schématiser :
Quand je clique sur mon bouton AJOUT, un tableau est généré avec l'utilisateur sélectionné provenant d'une DropDownList. A chaque nouvel utilisateur selectionné puis validé par mon bouton AJOUT une nouvelle ligne est ajouté a mon tableau avec en bout de ligne un bouton suppr (comme définit dans le "foreach" ci dessus) C'est donc en cliquant sur un des boutons suppr d'une des lignes du tableau qu'il faudrait qu'une autre procédure soit exécutée. Si je m'explique mal dite le moi je comprendrai tout a fait
Encore merci pour votre aide

4 réponses

Messages postés
14995
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
2 novembre 2020
448
Bonjour,

une hypothèse btn_suppr_user est déclaré dans ta boucle, sa durée de vie est donc une itération.
  
List<System.Web.UI.WebControls.Button> MaListe = new List<System.Web.UI.WebControls.Button>();

          foreach (string user_temp in list_ajout_user)
            {
                ListBox_ajout_user.Items.Add(user_temp);

                string[] var_user_selectionne = user_temp.Split(sep); //découpage de la chaine avec le séparateur &
                user = var_user_selectionne[0];
                droit = var_user_selectionne[1];

                btn_suppr_user = new System.Web.UI.WebControls.Button();
                btn_suppr_user.Text = "Suppr";
                btn_suppr_user.ID = user + "&" + droit;  
               //dans mon idée la ligne dessous ne doit pas être dans cette boucle;                                                           
               //[b] btn_suppr_user.Click += new system.EventHandler(this.Proc_click_btn_suppr_user);
                //Proc_click_btn_visible lors du click sur un bouton/b
                MaListe.Add(btn_suppr_user);// on le mets dans une liste
                this.Controls.Add(new LiteralControl("<tr><td> " + user + "</td><td> " + droit + "</td><td> "));
                this.Controls.Add(btn_suppr_user);
                lab_bienvenu.Text += btn_suppr_user.ID;
                
            }  

foreach( button MonBoouton in MaListe)
         MonBouton += new system.EventHandler(this.Proc_click_btn_suppr_user); //appel de la procédure Proc_click_btn_visible lors du click sur un bouton



Sans certitude.
Si ça marche tu dois pouvoir tout faire dans une seule boucle, en abonnant l'élément de la liste.
Par contre je ne comprend pas le .....

Whismeril
Messages postés
6
Date d'inscription
dimanche 8 mai 2011
Statut
Membre
Dernière intervention
28 juin 2011

Bonjour et merci pour ton aide. J'ai testé ta méthode, cela n'a pas marché.
La procédure Click de mon bouton Suppr n'est pas exécutée. Pourtant quand j'utilise cette méthode d'appel de procédure "Proc_click_btn_suppr_user(btn_suppr_user, e);" elle est bien exécuté mais pas au bon evenement. Ma syntaxe est peut etre mauvaise, voila ce qu'il demande dans ce cas : Proc_click_btn_suppr( object sender , EventArgs e )
Ça te dit quelque chose ?
c'est énervant de galérer sur ce truc !
Ça doit être possible pourtant d'ajouter un bouton a chaque alimentation d'une nouvelle ligne dans un tableau et de pouvoir exécuter une procédure associée aux boutons a l'évènement Click. Ce qui est troublant c'est que ca marche si le tableau est générée hors d'une procédure d'évènement
Merci encore pour votre aide
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
1 août 2013
12
Salut,

il me semble que tu ne peux déclarer des objets dynamiques avec événements serveur que dans le Load et le Init de ta page. A vérifier dans la MSDN.
Messages postés
14995
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
2 novembre 2020
448
Bonsoir,
je ne sais pas non désolé

Whismeril