Membres inscrits :668
Membres en ligne : 0
Invités en ligne : 8


|
| Conversation : click automatique dans un bouton radio |
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?
| |
|
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1191
Snippets: 23
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à...
|
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."
| |
|
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1191
Snippets: 23
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à...
|
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)
| |
|
|