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++/CLI Discussion :

Utiliser une fonction pour un bouton


Sujet :

C++/CLI

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 243
    Points : 103
    Points
    103
    Par défaut Utiliser une fonction pour un bouton
    Bonjour,

    Visual C++ génère lui même la structure dans laquelle on doit insérer son propre code. exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    private: System::Void bouton_Click(System::Object^  sender, System::EventArgs^  e) {
    		 }
    J'ai une application avec 96 boutons pour lesquels je fais un traitement d'une dizaine de lignes similaires, de façon à ne pas réécrire 96 fois ces 10 lignes, je souhaiterais écrire une fonction à laquelle je passerais quelque paramètres dont le bouton en question pour pouvoir écrire un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    private: System::Void bouton_Click(System::Object^  sender, System::EventArgs^  e) {
                            fonction_perso (int i, int j, ???? bouton ???);
    		 }
    Problème : je ne sais pas comment passer l'info "bouton" à ma fonction

    Bonne soirée et merci à ceux qui pourraient répondre.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 227
    Points : 88
    Points
    88
    Par défaut
    Salut,

    Je pense qu'il faut que tu fasses comme cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    private: System::Void bouton_Click(System::Object^  sender, System::EventArgs^  e)
     {
    Button ^monBouton = safe_cast<Button^>(sender);
                            fonction_perso (int i, int j, monBouton);
     }
    et il faut que tu declare ta fonction perso comme cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private: System::Void fonction_perso (int i, int j, Button ^ boutonConcerne);
    Voilà

    Kemanke

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 243
    Points : 103
    Points
    103
    Par défaut
    Merci pour la réponse,

    Le problème est que je ne comprends pas (ou connais pas) les mécanismes et du coup je n'arrive pas à utiliser le bouton dans la fonction.

    Supposons que dans la fonction je veuille simplement changer la couleur du bouton.

    Normalement quand je fais cela directement dans la fonction générée par Visual j'écris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    private: System::Void bouton_Click(System::Object^  sender, System::EventArgs^  e) {
    			this->bouton->BackColor = System::Drawing::Color::Blue;
    		 }
    Maintenant si je fais comme tu proposes, j'écris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    private: System::Void bouton_Click(System::Object^  sender, System::EventArgs^  e) {
    			 Button ^monBouton = safe_cast<Button^>(sender);
                             fonction_perso (int i, monBouton);
    		 }

    Quel est le rôle de la ligne Button^.... ?
    Comment se fait le lien entre monBouton et bouton ?

    Ensuite dans la fonction je dois avoir un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    private: System::Void fonction_perso (int i, int j, Button ^ boutonConcerne)
    {
    if (i ==1) this->??????->BackColor = System::Drawing::Color::Blue;
    if (i==2)  this->??????->BackColor = System::Drawing::Color::Red;
    }
    J'ai essayé de mettre à la place des "?????" des tas de choses mais rien ne marche.
    Faut il rajouter quelque chose ?


    Peux tu, stp, m'expliquer un petit peu comment cela fonctionne ou simplement me dire quoi mettre dans la fonction?

    Merci encore.

    Bonne soirée
    Jean-Louis

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    As-tu essayé un truc de ce genre?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    private: System::Void fonction_perso (int i, int j, Button ^ boutonConcerne)
    {
    if (i ==1) boutonConcerne->BackColor = System::Drawing::Color::Blue;
    if (i==2) boutonConcerne->BackColor = System::Drawing::Color::Red;
    }
    PS: Es-tu sûr au moins que pour un seul bouton, ça marche?
    Car j'ai toujours des doutes avec les boutons "Style XP" et/ou Vista...

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 243
    Points : 103
    Points
    103
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    As-tu essayé un truc de ce genre?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    private: System::Void fonction_perso (int i, int j, Button ^ boutonConcerne)
    {
    if (i ==1) boutonConcerne->BackColor = System::Drawing::Color::Blue;
    if (i==2) boutonConcerne->BackColor = System::Drawing::Color::Red;
    }
    PS: Es-tu sûr au moins que pour un seul bouton, ça marche?
    Car j'ai toujours des doutes avec les boutons "Style XP" et/ou Vista...
    Bonjour et merci,

    Oui, je l'ai mis dans une toute petite application et cela marche.
    C'est la première chose que j'ai essayée parce que cela ma paraissait évident, mais dans mon application ça ne marchait pas

    Le problème vient du fait que j'essaie de sortir mes fonctions du merdier généré par Visual en les mettant dans un autre fichier et des fois ça marche, des fois ça marche pas .... Le jour où j'aurais compris comment faire cela proprement, j'aurais fait un gros pas en avant ....

    Merci encore à Kemanke et à toi

    Bonne soirée

    jean-Louis

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 38
    Points : 30
    Points
    30
    Par défaut
    Il y a un moyen un peu plus sympa, qui t'évite d'avoir quand même les 96 fonctions bouton_clic.

    Dans l'éditeur de vue, tu clic sur ton bouton, tu va voir tes propriétés, en haut à gauche tu clic sur l'espèce d'éclair, tu vas à la ligne "Click", et tu lui mets la fonction que tu veux.

    Note, que la fonction doit avoir un type bien particulier. Donc le plus simple, c'est :
    Pour le premier bouton tu double clic dessus pour te générer automatiquement la fonction, et après pour les autres, tu utilises cette fonction comme paramètre de la ligne "Click".

    Après dans la fonction tu peux faire un traitement différent pour chaque bouton, avec sender-> ...

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 243
    Points : 103
    Points
    103
    Par défaut
    Merci pour toutes ces infos.

    Je vais essayer tout ça

    bonne soirée

    Jean-Louis

  8. #8
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 76
    Points : 96
    Points
    96
    Par défaut
    Autre suggestion :

    Si les boutons sont rangés régulièrement sur ton formulaire, tu fais une liste de boutons puis en boucle tu ajoutes tes boutons avec leurs évènements puis tu y accèdes au travers des éléments de ta liste. Et avec (List<Button^>^ boutons) c'est très facile puisqu'ils sont simplement identifiable avec leur index dans la liste..

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 243
    Points : 103
    Points
    103
    Par défaut
    Citation Envoyé par gabest Voir le message
    Autre suggestion :

    Si les boutons sont rangés régulièrement sur ton formulaire, tu fais une liste de boutons puis en boucle tu ajoutes tes boutons avec leurs évènements puis tu y accèdes au travers des éléments de ta liste. Et avec (List<Button^>^ boutons) c'est très facile puisqu'ils sont simplement identifiable avec leur index dans la liste..
    Bonjour gabest,

    Cela m'a l'air très intéressant, mais je débute en C++, en Visual et en CLI , je suis un peu perdu dans les handles, les ^, les <>, les -> ; Il faudra qu'un jour je clarifie tout ça dans ma tête

    Peut-être pourrais tu me donner un petit exemple avec 2 boutons?

    J'ai vu que pour un seul bouton Visual génère tout ce qui se trouve en dessous de mon post, je comprends à peu près à quoi cela sert.

    Comment insères tu une liste?
    Est ce que tu écris du code ou utilises tu un élément de la boite à outils ?



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private: System::Windows::Forms::Button^  bouton5;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this->bouton5 = (gcnew System::Windows::Forms::Button());
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // bouton5
    // 
    this->bouton5->BackColor = System::Drawing::Color::Red;
    this->bouton5->Location = System::Drawing::Point(186, 378);
    this->bouton5->Name = L"bouton5";
    this->bouton5->Size = System::Drawing::Size(40, 23);
    this->bouton5->TabIndex = 47;
    this->bouton5->Text = L"5";
    this->bouton5->UseVisualStyleBackColor = false;
    this->bouton5->Click += gcnew System::EventHandler(this, &Form1::bouton5_Click);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this->Controls->Add(this->bouton5);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    private: System::Void bouton5_Click(System::Object^  sender, System::EventArgs^  e) {
    		 }
    Bonne journée

    Jean-Louis

  10. #10
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 76
    Points : 96
    Points
    96
    Par défaut
    Tu mets cette boucle par exmple dans le code de chargement du formulaire.
    C'est toi qui gère la création des boutons

    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
     
    // création dynamique de 50 controls (boutons)
    for(int i=0;i<50;i++)
    {
     Conteneur->SuspendLaytout();
     Button^ b = gcnew Button();
     b->BackColor = System::Drawing::Color::Red;
     b->Location = System::Drawing::Point(186, 378);  // mettre ici le code qui va bien pour le positionnement différent de chaque bouton
     b->Name = L"bouton5";
     b->Size = System::Drawing::Size(40, 23);
     b->TabIndex = 47;
     b->Text = L"5";
     b->UseVisualStyleBackColor = false;
     b->Click += gcnew System::EventHandler(this, &Form1::b_Click);
     Conteneur->Controls->Add();
     Conteneur->PerformLayout();
     Conteneur->ResumeLayout(false);
    }
    Tu inséres tout ça dans une boucle et tu as tous tes boutons affichés dans leur conteneur et accessible dans la liste.
    Accès évènement b->Click
    void Form1::b_Click(Object^ sender,EventArgs^ e)
    {
     Button^ b = safe_cast<Button^>(sender);
     
     b->BackColor = System::Drawing::Color::Blue;
     b->Text = L"texte du bouton";
     ...
    }
    Si tu veux par exemple que en appuyant sur le bouton 1 tu modiufies le bouton 20 alors tu peux créer une liste de boutons :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    System::Collections::Generic::List<Button^>^ boutons = gcnew System::Collections::Generic::List<Button^>();
    et en même temps que tu ajoute le bouton créé à la liste des controls du conteneur, tu ajoutes le même bouton à la liste boutons en faisant :

    boutons->Add(b);


    Alors tu n'as plus qu'à écrire une méthode qui quand tu clickes sur
    boutons[0] ça modifie boutons[19].

    Voilà je ne sais pas si je suis bien clair sur toutes mes explications.

    Salut

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 243
    Points : 103
    Points
    103
    Par défaut
    Citation Envoyé par gabest Voir le message
    Tu mets cette boucle par exmple dans le code de chargement du formulaire.
    C'est toi qui gère la création des boutons

    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
     
    // création dynamique de 50 controls (boutons)
    for(int i=0;i<50;i++)
    {
     Conteneur->SuspendLaytout();
     Button^ b = gcnew Button();
     b->BackColor = System::Drawing::Color::Red;
     b->Location = System::Drawing::Point(186, 378);  // mettre ici le code qui va bien pour le positionnement différent de chaque bouton
     b->Name = L"bouton5";
     b->Size = System::Drawing::Size(40, 23);
     b->TabIndex = 47;
     b->Text = L"5";
     b->UseVisualStyleBackColor = false;
     b->Click += gcnew System::EventHandler(this, &Form1::b_Click);
     Conteneur->Controls->Add();
     Conteneur->PerformLayout();
     Conteneur->ResumeLayout(false);
    }
    Tu inséres tout ça dans une boucle et tu as tous tes boutons affichés dans leur conteneur et accessible dans la liste.
    Accès évènement b->Click
    void Form1::b_Click(Object^ sender,EventArgs^ e)
    {
     Button^ b = safe_cast<Button^>(sender);
     
     b->BackColor = System::Drawing::Color::Blue;
     b->Text = L"texte du bouton";
     ...
    }
    Si tu veux par exemple que en appuyant sur le bouton 1 tu modiufies le bouton 20 alors tu peux créer une liste de boutons :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    System::Collections::Generic::List<Button^>^ boutons = gcnew System::Collections::Generic::List<Button^>();
    et en même temps que tu ajoute le bouton créé à la liste des controls du conteneur, tu ajoutes le même bouton à la liste boutons en faisant :

    boutons->Add(b);


    Alors tu n'as plus qu'à écrire une méthode qui quand tu clickes sur
    boutons[0] ça modifie boutons[19].

    Voilà je ne sais pas si je suis bien clair sur toutes mes explications.

    Salut
    Merci beaucoup,

    Je ne suis pas sûr d'avoir tout compris, mais je vais essayer et je te tiens au courant.

    Cela me paraît sympa comme méthode

    Merci encore

    A+

    JL

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 243
    Points : 103
    Points
    103
    Par défaut
    Bonjour Gabest,

    Après une longue interruption de mon projet, je m'y remets

    J'ai essayé ta solution, le compilo me dit :
    Conteneur : identificateur non déclaré
    J'ai essayé différents trucs, mais rien ne marche pas.

    Bonne soirée.

  13. #13
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 76
    Points : 96
    Points
    96
    Par défaut
    En fait Conteneur désigne un conteneur quelque qu'il soit.

    Voici un exemple :

    Dans un formulaire tu place un splitContainer. Le code joint va placer n boutons dans le panel2 du splitContainer. Tu crées un bouton dans panel1 et une zone texte.
    Dans la zone texte tu tapes un numéro de bouton puis tu cliques sur le bouton et alors le bouton désigné change de couleur

    voici les codes :

    Form1.h
    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
     
    #pragma once
     
     
    namespace ListeBoutons {
     
        using namespace System;
        using namespace System::ComponentModel;
        using namespace System::Collections;
        using namespace System::Collections::Generic;
        using namespace System::Windows::Forms;
        using namespace System::Data;
        using namespace System::Drawing;
     
        /// <summary>
        /// Description résumée de Form1
        ///
        /// AVERTISSEMENT : si vous modifiez le nom de cette classe, vous devrez modifier la
        ///          propriété 'Nom du fichier de ressources' de l'outil de compilation de ressource managée
        ///          pour tous les fichiers .resx dont dépend cette classe. Dans le cas contraire,
        ///          les concepteurs ne pourront pas interagir correctement avec les ressources
        ///          localisées associées à ce formulaire.
        /// </summary>
        public ref class Form1 : public System::Windows::Forms::Form
        {
        public:
            Form1(void)
            {
                InitializeComponent();
                l_boutons = gcnew List<Button^>();
                AfficherNBoutons(100);
            }
     
        protected:
            /// <summary>
            /// Nettoyage des ressources utilisées.
            /// </summary>
            ~Form1()
            {
                if (components)
                {
                    delete components;
                }
            }
        private: System::Windows::Forms::SplitContainer^  splitContainer1;
        private: System::Windows::Forms::Button^  button1;
        private: System::Windows::Forms::TextBox^  textBox1;
     
     
        protected: 
     
        private:
            /// <summary>
            /// Variable nécessaire au concepteur.
            /// </summary>
            System::ComponentModel::Container ^components;
     
    #pragma region Windows Form Designer generated code
            /// <summary>
            /// Méthode requise pour la prise en charge du concepteur - ne modifiez pas
            /// le contenu de cette méthode avec l'éditeur de code.
            /// </summary>
            void InitializeComponent(void)
            {
                this->splitContainer1 = (gcnew System::Windows::Forms::SplitContainer());
                this->button1 = (gcnew System::Windows::Forms::Button());
                this->textBox1 = (gcnew System::Windows::Forms::TextBox());
                this->splitContainer1->Panel1->SuspendLayout();
                this->splitContainer1->SuspendLayout();
                this->SuspendLayout();
                // 
                // splitContainer1
                // 
                this->splitContainer1->Dock = System::Windows::Forms::DockStyle::Fill;
                this->splitContainer1->Location = System::Drawing::Point(0, 0);
                this->splitContainer1->Name = L"splitContainer1";
                // 
                // splitContainer1.Panel1
                // 
                this->splitContainer1->Panel1->Controls->Add(this->textBox1);
                this->splitContainer1->Panel1->Controls->Add(this->button1);
                this->splitContainer1->Size = System::Drawing::Size(674, 484);
                this->splitContainer1->SplitterDistance = 282;
                this->splitContainer1->TabIndex = 0;
                // 
                // button1
                // 
                this->button1->Location = System::Drawing::Point(21, 93);
                this->button1->Name = L"button1";
                this->button1->Size = System::Drawing::Size(234, 23);
                this->button1->TabIndex = 0;
                this->button1->Text = L"Changer la couleur du bouton numéro :";
                this->button1->UseVisualStyleBackColor = true;
                this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click);
                // 
                // textBox1
                // 
                this->textBox1->Location = System::Drawing::Point(21, 122);
                this->textBox1->Name = L"textBox1";
                this->textBox1->Size = System::Drawing::Size(234, 20);
                this->textBox1->TabIndex = 1;
                this->textBox1->TextAlign = System::Windows::Forms::HorizontalAlignment::Center;
                // 
                // Form1
                // 
                this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
                this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
                this->ClientSize = System::Drawing::Size(674, 484);
                this->Controls->Add(this->splitContainer1);
                this->Name = L"Form1";
                this->Text = L"Form1";
                this->splitContainer1->Panel1->ResumeLayout(false);
                this->splitContainer1->Panel1->PerformLayout();
                this->splitContainer1->ResumeLayout(false);
                this->ResumeLayout(false);
     
            }
    #pragma endregion
     
        private:
            Button^ curButton;
            List<Button^>^ l_boutons;
     
        private:
            void AfficherNBoutons(int nb);
            void curButton_Click( Object^ sender,EventArgs^ e);
            void button1_Click(System::Object^ sender,System::EventArgs^ e);
    };
    }
    Form1.cpp
    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    #include "stdafx.h"
    #include "Form1.h"
     
    using namespace System;
    using namespace System::ComponentModel;
    using namespace System::Collections;
    using namespace System::Collections::Generic;
    using namespace System::Windows::Forms;
    using namespace System::Data;
    using namespace System::Drawing;
     
    namespace ListeBoutons {
     
        void Form1::AfficherNBoutons(int nb)
        {
            int nb_boutons_par_ligne( (int)( splitContainer1->Panel2->Width / 40 ));
            for(int i=0;i<nb;i++)
            {
                this->splitContainer1->Panel2->SuspendLayout();
     
                curButton = gcnew Button();
                curButton->BackColor = System::Drawing::Color::Red;
                curButton->Location = System::Drawing::Point(10+(40*(i%nb_boutons_par_ligne)),10+(23*(int)(i/nb_boutons_par_ligne)));
                curButton->Name = L"bouton" + Convert::ToString(i+1);
                curButton->Size = System::Drawing::Size(40, 23);
                curButton->Text = Convert::ToString(i+1);
                curButton->TabIndex = i;
                curButton->UseVisualStyleBackColor = false;
                curButton->Click += gcnew System::EventHandler(this, &Form1::curButton_Click);
     
                this->splitContainer1->Panel2->Controls->Add(curButton);
                l_boutons->Add(curButton);
     
                this->splitContainer1->Panel2->PerformLayout();
                this->splitContainer1->Panel2->ResumeLayout(true);
            }
        }
     
        void Form1::curButton_Click(System::Object ^sender, System::EventArgs ^e)
        {
            Button^ b = safe_cast<Button^>(sender);
        }
     
        void Form1::button1_Click(System::Object ^sender, System::EventArgs ^e)
        {
            try
            {
                int numB( Convert::ToInt32( textBox1->Text ) );
                for each( Button^ bt in l_boutons )
                {
                    bt->BackColor = System::Drawing::Color::Red;
                }
                l_boutons[numB-1]->BackColor = System::Drawing::Color::Blue;
            }
            catch(Exception^)
            {
            }
        }
    }
    Comme tu peux le voir pour atteindre le bouton désigné j'utilise la liste des boutons l_boutons. J'espère que cela te donneras des idées.

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 243
    Points : 103
    Points
    103
    Par défaut
    Citation Envoyé par gabest Voir le message
    En fait Conteneur désigne un conteneur quelque qu'il soit.

    Voici un exemple :

    Dans un formulaire tu place un splitContainer. Le code joint va placer n boutons dans le panel2 du splitContainer. Tu crées un bouton dans panel1 et une zone texte.
    Dans la zone texte tu tapes un numéro de bouton puis tu cliques sur le bouton et alors le bouton désigné change de couleur

    voici les codes :

    Form1.h
    Form1.cpp

    Comme tu peux le voir pour atteindre le bouton désigné j'utilise la liste des boutons l_boutons. J'espère que cela te donneras des idées.
    Bonsoir gabest et MERCI !!!

    C'est génial, j'ai copié tes fichiers, j'ai compilé et ça marche du premier coup ...

    Je m'attelle à comprendre

    A+

    Jean-Louis

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

Discussions similaires

  1. Problème : Utiliser une fonction pour 2 colonnes
    Par Eleanor dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 16/07/2013, 15h04
  2. [Security] Spring security - utiliser une fonction pour l'autentification
    Par florianj dans le forum Spring
    Réponses: 1
    Dernier message: 20/11/2012, 12h09
  3. Réponses: 2
    Dernier message: 29/08/2007, 19h43
  4. utiliser une fonction VOID pour des blocs relationnels ?
    Par ctobini dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 11/09/2006, 16h16
  5. Utiliser une touche pour appeller une fonction
    Par Hide dans le forum Langage
    Réponses: 2
    Dernier message: 13/10/2005, 16h59

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