wxDev.fr, le portail francophone consacré à wxWidgets ! ( The french portal for wxWidgets )  
Esp. membre
Recheche rapide



Recherche avancée
Statistiques
Membres inscrits :2359

Membres en ligne : 0
Invités en ligne : 2

Valid XHTML 1.0 Transitional

Valid CSS2

Menu forum (navigation):
Pages: 1  
 
Accueil » Accueil forums » Utilisation générale wxWidgets
» Création de contrôle dynamiquement et événements
Conversation (Résolue) : Création de contrôle dynamiquement et événements
28-10-2008 13:41:14  Création de contrôle dynamiquement et événements #1
congelli501 (Membre)
Inscrit le : 08-06-2008
Messages: 46
Snippets: 0
Tutoriels: 0
Site web
Hors ligne
Bonjour,
J'ai un petit problème avec les événements dans wxWidgets.
En fait, je créé dynamiquement des wxButton et je les connecte à un méthode de ma classe.
Le problème, c'est que la méthode qui s'occupe des événements ne peut pas savoir sur quel bouton j'ai appuyé.
Voici mon code :
Header :

Code wxWidgets:

class PanelItems : public wxPanel
{
public:
    PanelItems(wxWindow* parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxTAB_TRAVERSAL );
 
    void OnAddItem(wxCommandEvent& event);
    void OnRemoveItem(wxCommandEvent& event);
    void OnButtonItem(wxCommandEvent& event);
 
private:
    wxButton *m_btAddRoom, *m_btRemoveRoom;
 
    wxBoxSizer* m_MainSizer;
 
    enum { Id_ButtonItem };
 
    std::vector<wxButton*> m_btList;
};


Implementation :

Code wxWidgets:

 
#include "PanelItems.hpp"
 
PanelItems::PanelItems( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style ) : wxPanel( parent, id, pos, size, style )
{
    m_MainSizer = new wxBoxSizer( wxVERTICAL );
 
    wxBoxSizer* btItem = new wxBoxSizer( wxHORIZONTAL );
    btItem->Add(new wxStaticText(this, wxID_ANY, _("Items : ")), 0, wxALIGN_CENTER_VERTICAL | wxALL, 5);
    m_btAddRoom = new wxButton(this, wxID_ADD);
    btItem->Add(m_btAddRoom, 0, wxALL, 5);
    m_btRemoveRoom = new wxButton(this, wxID_REMOVE );
    btItem->Add(m_btRemoveRoom, 0, wxALL, 5);
    m_MainSizer->Add(btItem);
 
    SetSizer( m_MainSizer );
 
    Connect( wxID_ADD, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(PanelItems::OnAddItem));
    Connect( wxID_REMOVE, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(PanelItems::OnRemoveItem));
}
 
//------------------------------------------------------------------------------
void PanelItems::OnAddItem(wxCommandEvent& event)
{
    wxString btCaption;
    btCaption << _("Ceci est le bouton") << m_btList.size();
    m_btList.push_back(new wxButton(this, Id_ButtonItem + m_btList.size(), btCaption));
    m_MainSizer->Add( m_btList[m_btList.size() - 1], 0, wxLEFT, 10);
 
    Connect( Id_ButtonItem + m_btList.size() - 1, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(PanelItems::OnButtonItem));
 
    m_MainSizer->Layout();
}
 
//------------------------------------------------------------------------------
void PanelItems::OnRemoveItem(wxCommandEvent& event)
{
    if(m_btList.size() > 0)
    {
        m_btList[m_btList.size() - 1]->Destroy();
 
        m_btList.pop_back();
        m_MainSizer->Layout();
 
        Disconnect( Id_ButtonItem + m_btList.size() - 1, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(PanelItems::OnButtonItem));
    }
}
 
//------------------------------------------------------------------------------
void PanelItems::OnButtonItem(wxCommandEvent& event)
{
    wxMessageBox(_("coucou"));
}
 
 

Dernière modification par congelli501 (28-10-2008 13:44:47)


Mes programmes open sources !
On dit que la Grèce antique beaucoup d'influence sur notre culture... C'est vrai : la chute d'Athènes a eu lieu en 404 avant JC. Ca vous rappelle quelque chose ?
28-10-2008 17:11:12  Re: Création de contrôle dynamiquement et événements #2
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1390
Snippets: 25
Tutoriels: 6
Site web
Hors ligne
Salut.

Regardes du côté du paramètre de la fonction qui reçoit l'événement : il y a un wxCommandEvent, qui est dérivé d'un wxEvent, qui lui, possède une méthode membre GetId() te permettant de récupérer l'ID du bouton qui a été pressé.

@+
Xav'

Le nouveau portail wxWidgets francophone : www.wxdev.fr
Ben en fait, vous y êtes déjà... et effectivement, depuis le temps, ce n'est plus tellement nouveau....
28-10-2008 22:44:09  Re: Création de contrôle dynamiquement et événements #3
congelli501 (Membre)
Inscrit le : 08-06-2008
Messages: 46
Snippets: 0
Tutoriels: 0
Site web
Hors ligne
En effet, j'ai oublié de regardé dans la classe mère...
Ça devrait aller avec ce renseignement, merci !

Mes programmes open sources !
On dit que la Grèce antique beaucoup d'influence sur notre culture... C'est vrai : la chute d'Athènes a eu lieu en 404 avant JC. Ca vous rappelle quelque chose ?
Menu forum (navigation):
Pages: 1  
 
Accueil » Accueil forums » Utilisation générale wxWidgets
» Création de contrôle dynamiquement et événements