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

wxWidgets Discussion :

Comment différencier les événements sur wxButton ?


Sujet :

wxWidgets

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 31
    Points : 25
    Points
    25
    Par défaut Comment différencier les événements sur wxButton ?
    Bonjour,

    En wxWidgets, j'ai cru comprendre que pour chaque Bouton créé, nous lui affections un id qui servait ensuite à lui affecter un événement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    BEGIN_EVENT_TABLE(scheduleViewerI, wxFrame)
         EVT_BUTTON(id_bouton_1, fonction_associee)
    END_EVENT_TABLE()
     
    fonction_associee(wxMouseEvent& event) {
         Choses à faire lorsque que le bouton d'id "id_bouton_1" est cliqué.
    }
    Cependant je crée mes boutons dynamiquement, et je leur affecte le même id pour qu'ils réagissent à la même fonction. J'aimerais, lorsque j'arrive dans cette fonction, pouvoir identifier le bouton sur lequel je viens de cliquer, comment faire ? Puis je recuperer l'objet d'après le wxMouseEvent& event?
    Merci,

    Eddy.

  2. #2
    Membre éclairé Avatar de hansaplast
    Homme Profil pro
    Artisant logiciel
    Inscrit en
    Septembre 2005
    Messages
    949
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Artisant logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 949
    Points : 730
    Points
    730
    Par défaut
    bein, tu leur assigne un id differend, par contre, tu leur associe a tous la meme fonction appelée lors de l'evenement.
    Cette fonction sera soit la bonne, soit elle en appelera une autre.

    Cette fonction aura en entrée un wxEvent.
    ton wxevent te donnera l'id du bouton cliqué.
    tu pourra donc reagir en consequence.
    si c'est une autre fonction que tu lance, tu n'a qu'a lui envoyer cet id.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 31
    Points : 25
    Points
    25
    Par défaut
    Bonjour,

    Le probléme c'est que l'on affecte une fonction à un élément graphique de la façon suivante :

    EVT_BUTTON(id, Fonction)

    Hors, dans mon cas, je ne peux pas me permettre de donner un id différent à mes boutons puisqu'ils sont créés dynamiquement ! Certes, comment pourrai-je alors faire le lien entre un bouton et une fonction puisque je ne pense pas pouvoir (?) ajouter dynamiquement des links du type "EVT_BUTTON(id, Fonction)" dans ma table d'événements !

    C'est pourquoi je délcare ma table ainsi :

    BEGIN_EVENT_TABLE(scheduleViewerI, wxFrame)
    EVT_BUTTON(idBouton, Fonction)
    END_EVENT_TABLE()

    Puis je donne l'id "idBouton" à chaque bouton pour que la fonction soit appelée. Seulement, une fois appelée, je ne peux pas différencier les éléments par leur id, ils ont tous le mêmes ! Donc je voudrais récupérer carrement l'objet pour pouvoir récupérer son nom (qui est alors différents des autres) et ainsi l'identifier.

    Est-ce-possible ?

    Merci d'avance

    ++ Eddy.

  4. #4
    Membre éclairé Avatar de hansaplast
    Homme Profil pro
    Artisant logiciel
    Inscrit en
    Septembre 2005
    Messages
    949
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Artisant logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 949
    Points : 730
    Points
    730
    Par défaut
    setEventHandler

    regarde du coté de cette fonction
    je,pense que c'est la solution
    ca te mpermet d'affecter dynamiquement un gestionnaire d'evenements

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 31
    Points : 25
    Points
    25
    Par défaut
    Re,

    Cette fonction me permet-elle d'ajouter librement des éléments dans ma table d'événements ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    BEGIN_EVENT_TABLE(mySplitterWindow, wxSplitterWindow)
           (...) 
           EVT_PAINT(mySplitterWindow::OnPaint)
           (...) 
    END_EVENT_TABLE()
    Si c'est le cas, je suis comme fou

    ++ Eddy.

  6. #6
    Membre éclairé Avatar de hansaplast
    Homme Profil pro
    Artisant logiciel
    Inscrit en
    Septembre 2005
    Messages
    949
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Artisant logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 949
    Points : 730
    Points
    730
    Par défaut
    pas le temps de te repondre (je passe 2 oraux ce matin)
    mais va voir du coté du site de wxwidgets
    (je le donne pas, il a changé et je me souvient jamais du nom du nouveaux)

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 31
    Points : 25
    Points
    25
    Par défaut C good ;)
    C'est bon, j'ai trouvé réponse à ma question.

    Arrivé dans la fonction, nous pouvons effectivement identifier par une simple fonction l'objet qui a déclenché l'événement : GetEventObject().

    Ainsi, je peux utiliser le même ID pour tous mes boutons, chaque événemnt bouton appelera la même fonction, mais je ferai un traitement spécifique en fonction du bouton cliqué (car je pourrai l'identifier par son nom qui est unique).

    Merci pour ton aide

    ++ Eddy.

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    Moi j'ai fais comme ceci et ça marche plutôt bien
    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
     
    // une énumération pour définir les ID's
    enum
    {
        	// tu réserves une plage d'ID pour les bouton
    	ID_CMD_MONBOUTON_FIRST = 100,
        	ID_CMD_MONBOUTON_LAST  = 109,	// pour 10 boutons par exemple
     
    	// ... (suite des id)
     
    };
     
     
    // Dans ton constructeur
    MyFrame::MyFrame()
    {
    	// ...
    	// Création de tes boutons en incrémentant l'ID de départ à chaque bouton
    	for(int i=0; i<10 ; i++)
    	{
    	    wxString str;
    	    str.Printf(_T("Bouton %u"), i);
    	    cmdSurligneur[i] = new wxButton(this, ID_CMD_SURLIGNEUR_FIRST + i, str,
    		    wxPoint(190+(i*105),10), wxSize(100,30), 0, wxDefaultValidator,
    		    _T("wxBouton"));
    	}
     
    	// Puis tu connectes tes boutons avec une fonction genre
    	Connect( ID_CMD_MONBOUTON_FIRST, ID_CMD_MONBOUTON_LAST, wxEVT_COMMAND_BUTTON_CLICKED,
    		wxCommandEventHandler(MyFrame::OnBouton ));
     
    	// ...
    }
     
    // Méthode appelée par l'event
    void MyFrame::OnBouton(wxCommandEvent& event)
    {
       	// récupère l'id du bouton cliqué
    	int id = event.GetID();
     
    	//... faire selon l'id récupèrée...
    }

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

Discussions similaires

  1. [AC-2007] Comment faire pour vider les enregistrements de 5 colonnes sur 10
    Par Debutant10 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 31/08/2011, 15h04
  2. Réponses: 2
    Dernier message: 04/01/2008, 07h42
  3. Réponses: 2
    Dernier message: 04/01/2008, 07h42
  4. [JTable] Comment ne pas afficher les titres ?
    Par FabienBxl dans le forum Composants
    Réponses: 3
    Dernier message: 08/10/2003, 15h01
  5. [][Excel] Comment ne pas détruire les formules ?
    Par flyangelNext dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 08/07/2003, 11h38

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