IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Event sur boutons générés dynamiquement


Sujet :

C#

  1. #1
    Membre régulier
    Profil pro
    IT Développeur
    Inscrit en
    Mars 2009
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Développeur

    Informations forums :
    Inscription : Mars 2009
    Messages : 274
    Points : 96
    Points
    96
    Par défaut Event sur boutons générés dynamiquement
    Bonjour,

    voici mon soucis. J'affiche dynamiquement des boutons à partir de ma base de données.

    Ceci ce fait au load de ma form. J'ai créé un Event lors du chargement des boutons. Le but étant qu'en fonction du bouton sur lequel on clic, d'autres boutons s'affichent en rapport.

    Cela fonctionne lorsque pour la première fois je clique sur n'importe quel bouton. Je passe bien à ce moment dans mon Event. Par contre, pour les suivants je n'y passe plus.

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
     public void loadView()
            {
                caisse = new Caisse();
                // Load Category buttons
                ButtonCategorie b;
                foreach (Categorie ca in caisse.getCatgories())
                {
                    b = new ButtonCategorie(ca);
                    PanelCategorie.Controls.Add(b);
                    b.Click += new EventHandler(b_Click);
                }
                btnPrecedent.Enabled = false;
                btnSuivant.Enabled = false;
            }
     
            // Event on Category
            void b_Click(object sender, EventArgs e)
            {
                buttonIndex = 0;
                ButtonCategorie b = (ButtonCategorie)sender;
                Categorie c = (Categorie)b.Tag;
                page = 1;
                MessageBox.Show(String.Format("{0}", c.Id));
                displayProducts(c.Id, buttonIndex);
            }
     
            // Display Products
            private void displayProducts(int categorieId, int buttonIndex)
            {
                ButtonProducts b;
                ProductList = null;
                categorieID = categorieId;
                // Initialise the PanelProduct
                PanelProduit.Controls.Clear();
                totalButtons = caisse.getProductbyCategory(categorieID).Count;
                totalPages = (step > 0 ? Math.Ceiling((decimal)(totalButtons / step)) : 0);
     
                ProductList = caisse.getProductbyCategory(categorieID);
     
                for (int i = 0; i < step; i++)
                {
                    if (buttonIndex >= ProductList.Count())
                        return;
     
                    b = new ButtonProducts(ProductList[i]);
                    PanelProduit.Controls.Add(b);
                    buttonIndex++;
                }
                checkNavigationButtons();
            }
    Quelqu'un aurait-il une idée sur la raison pour laquelle il ne passe q'une seule fois? Est-ce que mon appel à mon Event est mal positionné?

    Merci pour votre aide.

  2. #2
    Membre régulier
    Profil pro
    IT Développeur
    Inscrit en
    Mars 2009
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Développeur

    Informations forums :
    Inscription : Mars 2009
    Messages : 274
    Points : 96
    Points
    96
    Par défaut
    J'ai trouvé.
    Je ne sais pour quelle raison, il ne passait pas dans ma fonction checkNavigationButtons qui était appelée en fin de fonction displayProducts. Je l'ai donc déplacé à la fin de mon Event juste après l'appel de la fonction displayProducts. De cette façon, je passe bien dans checkNavigationButtons . Mais je ne comprends pas pour quelle raison il ne le faisait pas depuis displayProducts.

    Donc au final, le code donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
     public void loadView()
            {
                caisse = new Caisse();
                // Load Category buttons
                ButtonCategorie b;
                foreach (Categorie ca in caisse.getCatgories())
                {
                    b = new ButtonCategorie(ca);
                    PanelCategorie.Controls.Add(b);
                    b.Click += new System.EventHandler(this.b_Click);
                }
                btnPrecedent.Enabled = false;
                btnSuivant.Enabled = false;
            }
     
            // Event on Category
            void b_Click(object sender, EventArgs e)
            {
                buttonIndex = 0;
                ButtonCategorie b = (ButtonCategorie)sender;
                Categorie c = (Categorie)b.Tag;
                page = 1;
                displayProducts(c.Id, buttonIndex);
                checkNavigationButtons();
            }
     
            // Display Products
            private void displayProducts(int categorieId, int buttonIndex)
            {
                ButtonProducts b;
                ProductList = null;
                categorieID = categorieId;
                // Initialise the PanelProduct
                PanelProduit.Controls.Clear();
                totalButtons = caisse.getProductbyCategory(categorieID).Count;
                totalPages = (step > 0 ? Math.Ceiling((decimal)(totalButtons / step)) : 0);
     
                ProductList = caisse.getProductbyCategory(categorieID);
     
                for (int i = 0; i < step; i++)
                {
                    if (buttonIndex >= ProductList.Count())
                        return;
     
                    b = new ButtonProducts(ProductList[i]);
                    PanelProduit.Controls.Add(b);
                    buttonIndex++;
                }
            }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. autopostback sur bouton creer dynamiquement
    Par xian21 dans le forum C#
    Réponses: 1
    Dernier message: 17/06/2008, 09h50
  2. Réponses: 2
    Dernier message: 14/05/2008, 16h18
  3. Libelle d'un bouton généré dynamiquement
    Par supertoms dans le forum IHM
    Réponses: 7
    Dernier message: 18/04/2008, 18h55
  4. evenement sur bouton créé dynamiquement
    Par J@ckHerror dans le forum Windows Forms
    Réponses: 3
    Dernier message: 28/03/2007, 04h24
  5. [VBA-W] Evénement sur bouton créé dynamiquement
    Par ptilo dans le forum VBA Word
    Réponses: 9
    Dernier message: 21/06/2006, 11h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo