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 : 3

Valid XHTML 1.0 Transitional

Valid CSS2

Menu forum (navigation):
Pages: 1  
 
Accueil » Accueil forums » Développement C/C++
» click automatique dans un bouton radio
Conversation : click automatique dans un bouton radio
19-10-2010 14:37:21  click automatique dans un bouton radio #1
tchibo (Nouveau membre)
Inscrit le : 19-10-2010
Messages: 3
Snippets: 0
Tutoriels: 0
Hors ligne
bonjour,
j'ai eu un tp à faire sous wxwidget avec formbuilder attaché.

Je devais faire des requêtes pour obtenir les noms des eleves d'une classe les noms des classes ( 1ere a,1ere b..) ainsi que les noms des sections de ces classes ( 1ere, seconde...).

on doit donc cliquer sur le nom d'une section pour avoir les classes et ensuite choisir une classe ( bouton radio ) pour avoir les eleves.

tout marche sauf quand je lance le programme, quand je choisis une section, la première classe ( le premier bouton radio ) est sélectionné automatiquement mais ça ne m'affiche pas le nom des eleves, si je veux les noms il faut que je re-clique sur la classe.

quelqu'un aurait une solution pour que le nom des eleves s'affiche directement?
19-10-2010 14:49:54  Re: click automatique dans un bouton radio #2
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1375
Snippets: 25
Tutoriels: 6
Site web
Hors ligne
Salut, et bienvenue sur wxDev.fr

En effet, lorsque tu défini manuellement la valeur d'un wxRadioButton, l'événement associé n'est pas généré.
Mais tu peux le générer toi-même :

Code wxWidgets:

 
// On force la valeur du wxRadioButton
m_wxRadioButton->SetValue(true);
// On crée la variable wxEvent correspondante
wxCommandEvent evt(wxEVT_COMMAND_RADIOBUTTON_SELECTED, m_wxRadioButton->GetId());
// On ajoute l'événement dans la queue
AddPendingEvent(evt);
 


Tu as aussi la possibilité de créer une méthode spécifique pour mettre à jour tes contrôles en fonction de ce qui est sélectionné, et tu appelles cette méthode depuis celle qui reçoit l'événement, et au départ après avoir créé tous tes contrôles.

@+
Xav'

Le nouveau portail wxWidgets francophone : www.wxdev.fr
Ben en fait, vous y êtes déjà...
19-10-2010 15:16:50  Re: click automatique dans un bouton radio #3
tchibo (Nouveau membre)
Inscrit le : 19-10-2010
Messages: 3
Snippets: 0
Tutoriels: 0
Hors ligne
D'accord, j'ai compris l'utilisation mais je n'arrive pas à l'intégrer au code, peut-être que cela est du au fait que les boutons radios sont créés dynamiquement.

voila mon code:

Code wxWidgets:

// on crée les radiobox contenant les classes des sections
    wxArrayString m_radio_box_classe_choices;
    m_radio_box_classe.resize(nombre_sections_scolaires);
    for (unsigned int categorie=0; categorie<nombre_sections_scolaires+nombre_sections_non_scolaires;categorie++)
    {
        // on crée une radiobox contenant les classes pour chaque categories
        if (categorie<nombre_sections_scolaires)
        {
            // on récupère le nombre de classes pour chaque categories
            unsigned int nombre_classes=m_nom_classes[categorie].size();
            m_radio_box_classe_choices.Empty();
            // on remplit les radiobox avec le nom des classes de la categorie
            for (unsigned int classe=0; classe<nombre_classes; classe++)
            {
                m_radio_box_classe_choices.Add(m_nom_classes [categorie][classe]);
            }
            m_radio_box_classe[categorie]= new wxRadioBox(m_panel_categorie[categorie], -1, wxT("Classes"),
                        wxDefaultPosition, wxDefaultSize, m_radio_box_classe_choices, 0, wxRA_SPECIFY_ROWS);
            m_radio_box_classe[categorie]->SetSelection(0);
            //m_radio_box_classe_choices->SetValue(true);
 
 
            m_sizer_notebook_categorie[categorie]->Add(m_radio_box_classe[categorie], 0, wxADJUST_MINSIZE, 0);
        }
        m_sizer_notebook_categorie[categorie]->Add(m_affichage_noms_categorie[categorie], 1, wxEXPAND|wxADJUST_MINSIZE, 0);
        m_panel_categorie[categorie]->SetAutoLayout(true);
        m_panel_categorie[categorie]->SetSizer(m_sizer_notebook_categorie[categorie]);
        m_sizer_notebook_categorie[categorie]->Fit(m_panel_categorie[categorie]);
        m_sizer_notebook_categorie[categorie]->SetSizeHints(m_panel_categorie[categorie]);
    }
    // on ajoute les panels au notebook
    for (unsigned int categorie=0;categorie<nombre_sections_scolaires+nombre_sections_non_scolaires;categorie++)
    {
        if (categorie<nombre_sections_scolaires)
        {
            m_notebook_saisie_manuelle->AddPage(m_panel_categorie[categorie], m_nom_sections_scolaires[categorie]);
            // on connecte les événements des radiobox des classes
            Connect(m_radio_box_classe[categorie]->GetId( ), wxEVT_COMMAND_RADIOBOX_SELECTED,
                                    (wxObjectEventFunction) &EvtPanelSaisieManuelle::AfficheAbsentsClasse);
        }
        else
        {
            m_notebook_saisie_manuelle->AddPage(m_panel_categorie[categorie], m_nom_sections_non_scolaires[categorie-nombre_sections_scolaires]);
        }
    }
 
    // on ajoute le notebook
    bSizerPanelSaisieManuelle->Add(m_notebook_saisie_manuelle, 1, wxEXPAND, 0);
    Layout();
}
 
void EvtPanelSaisieManuelle::AfficheAbsentsClasse(wxCommandEvent& event)
{
    vector < vector < list <int> > > scolaires_non_passes=m_MonLycee->GetScolairesNonPasses();
    unsigned int nombre_sections_scolaires=m_radio_box_classe.size();
    for (unsigned int niveau=0; niveau<nombre_sections_scolaires;niveau++)
    {
        // On cherche le niveau de la classe dont on veut afficher les absents
        if (event.GetId()==m_radio_box_classe[niveau]->GetId())
        {
            // onrécupère la classe sélectionnée
            int classe=m_radio_box_classe[niveau]->GetSelection();
            wxArrayString codes;
            // on récupère les nom des absents de la classe
            for (list<int>::iterator i = scolaires_non_passes[niveau][classe].begin();
                            i != scolaires_non_passes[niveau][classe].end();
                            i++)
            {
                codes.Add(m_BD_Restauration->RetourneNomPrenom(*i));
 
            }
            // on affiche les noms des absents de la classe
            m_affichage_noms_categorie[niveau]->Clear();
            m_affichage_noms_categorie[niveau]->InsertItems(codes,0);
 
 
 
        }
 
    }
 
}


des que je met un SetValue j'ai une erreur : "has no membre SetValue."
19-10-2010 16:00:15  Re: click automatique dans un bouton radio #4
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1375
Snippets: 25
Tutoriels: 6
Site web
Hors ligne
Effectivement.
En fait, j'ai mis le code pour un (ou plusieurs) wxRadioButton.

Dans ton cas, il s'agit d'une wxRadioBox.
La méthode est presque la même :

Code wxWidgets:

 
// On sélectionne le premier élément de la wxRadioBox
m_wxRadioBox->SetSelection(0);
// On crée la variable wxEvent correspondante
wxCommandEvent evt(wxEVT_COMMAND_RADIOBOX_SELECTED, m_wxRadioButton->GetId());
// On ajoute l'événement dans la queue
AddPendingEvent(evt);


Ce code est bien entendu à adapter au tien.

@+
Xav'

Le nouveau portail wxWidgets francophone : www.wxdev.fr
Ben en fait, vous y êtes déjà...
19-10-2010 16:28:05  Re: click automatique dans un bouton radio #5
tchibo (Nouveau membre)
Inscrit le : 19-10-2010
Messages: 3
Snippets: 0
Tutoriels: 0
Hors ligne
J'ai essayer de l'inclure dans mon code comme ceci :

Code wxWidgets:

void EvtPanelSaisieManuelle::AfficheAbsentsClasse(wxCommandEvent& event)
{
    vector < vector < list <int> > > scolaires_non_passes=m_MonLycee->GetScolairesNonPasses();
    unsigned int nombre_sections_scolaires=m_radio_box_classe.size();
    for (unsigned int niveau=0; niveau<nombre_sections_scolaires;niveau++)
    {
        // On cherche le niveau de la classe dont on veut afficher les absents
    if (event.GetId()==m_radio_box_classe[niveau]->GetId())
        {
                // onrécupère la classe sélectionnée
            int classe=m_radio_box_classe[niveau]->GetSelection();
            wxArrayString codes;
            // on récupère les nom des absents de la classe
            for (list<int>::iterator i = scolaires_non_passes[niveau][classe].begin();
                            i != scolaires_non_passes[niveau][classe].end();
                            i++)
            {
                codes.Add(m_BD_Restauration->RetourneNomPrenom(*i));
 
 
            }
            // on affiche les noms des absents de la classe
 
            m_affichage_noms_categorie[niveau]->Clear();
            m_affichage_noms_categorie[niveau]->InsertItems(codes,0);
 
m_affichage_noms_categorie[niveau]->SetSelection(0);
 
wxCommandEvent evt(wxEVT_COMMAND_RADIOBOX_SELECTED,m_affichage_noms_categorie[niveau]->GetId());
 
AddPendingEvent(evt);
 
 
 
        }
        }
 
    }


mais ça ne marche toujours pas :/
----------
c'est bon ça marche , voici le code

Code wxWidgets:

for (unsigned int classe=0; classe<nombre_classes; classe++)
            {
                m_radio_box_classe_choices.Add(m_nom_classes [categorie][classe]);
            }
            m_radio_box_classe[categorie]= new wxRadioBox(m_panel_categorie[categorie], -1, wxT("Classes"),
                        wxDefaultPosition, wxDefaultSize, m_radio_box_classe_choices, 0, wxRA_SPECIFY_ROWS);
            m_radio_box_classe[categorie]->SetSelection(0);
            wxCommandEvent evt(wxEVT_COMMAND_RADIOBOX_SELECTED, m_radio_box_classe[categorie]->GetId());
 
            AddPendingEvent(evt);
 

Dernière modification par tchibo (19-10-2010 16:57:33)

Menu forum (navigation):
Pages: 1  
 
Accueil » Accueil forums » Développement C/C++
» click automatique dans un bouton radio