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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    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
    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 confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 227
    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 éclairé
    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
    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
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    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...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre éclairé
    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
    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
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 38
    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-> ...

+ 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