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

MFC Discussion :

Comment accéder aux éléments d'un CDialog fille par une variable controle CTabCtrl


Sujet :

MFC

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Mai 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 7
    Points : 1
    Points
    1
    Par défaut Comment accéder aux éléments d'un CDialog fille par une variable controle CTabCtrl
    Bonjour a tous,

    Je développe une appli MFC en Visual C++ 6 et je ne sais pas comment avoir accés au éléments d'un CDialog fille créé par un CTabCtrl dans un CDialog parent.
    Je m'explique.
    J'ai créé un CDialog parent et y ai mis un TabCtrl par le wizard puis j'ai créé une classe pour le CDialog parent comme d'habitude pour créer des variables controles de chaque éléments de mon Dialog parent. Jusque la pas de soucie.
    J'ai ensuite créer une classe dérivé de CTabCtrl pour pouvoir créer mes Dialog fille de chaque onglet de mon TabCtrl. Pas de soucie la non plus mes onglet fonctionne trés bien et sont affiché correctement.

    Mon pb c'est que je souhaite dans le Initdialog du dialog parent avoir acces au éléments contenu dans les dialog filles (onglet) créé par mon CTabCtrl.

    Quelqu'un peux t'il m'aider ???

  2. #2
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 421
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 421
    Points : 20 580
    Points
    20 580
    Par défaut
    Les liaisons entre fenêtres parentes et filles se font avec le HWND membre de chaque classe...
    ou bien celui passé en paramêtre au constructeur de la fenêtre dialogue fille..voir dans les tutos de Farscape ou MSDN
    Sinon regarder autour de CWnd::GetParent()

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Mai 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    J'ai déjà essayé le GetParent() (et c la que j'en suis le plus proche) en utilisant le type de code suivant :

    CDlg_Assignment *pDlg=( CDlg_Assignment*)GetParent();

    ou CDlg_Assignement est la classe de mon dlg fille.

    et en essayant d'accéder à ma variable controle de mon dialog fille par :

    pDlg->m_Assignement_Entity_Combo.AddString("toto");

    ou m_Assignement_Entity_Combo est une variable controle de type CComboBox d'un combobox inséré sur mon Dlg fille.

    Malheureusement j'ai une erreur d'exécution sur le AddString du ComboBox dans AfxWin qui plante totalement mon appli et je ne sais pas la résoudre.

    Si tu as des infos pouvant m'aider ou quiconque ??

  4. #4
    Membre éprouvé
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par cgod1
    Mon pb c'est que je souhaite dans le Initdialog du dialog parent avoir acces au éléments contenu dans les dialog filles (onglet) créé par mon CTabCtrl.
    Soit je n'ai pas bien compris ce que tu cherches, soit tu t'es trompé dans ton post:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CDlg_Assignment *pDlg=( CDlg_Assignment*)GetParent();
    Pourquoi caster le handle sur le parent en CDlg_Assignment (qui est la classe fille si j'ai bien compris)?

    Je pense que dans le InitDialog du parent, tu dois aller chercher la classe CDlg_Assignment pointée par chaque onglet de ton TabCtrl (tu dois sûrement avoir un controle membre dans ta classe parente désignant ton TabCtrl). Enfin, dans ta classe fille, ton controle combobox doit (sauf erreur de ma part) être en accès public.

    Ainsi tu devrais avoir dans le Initdialog du parent un truc dans le genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m_monTabCtrl.GetPointeurSurCDialog()->m_maComboBox.AddString("pwet")

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Mai 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    En fait le Dialog parent n'est qu'un conteneur du CTabCtrl et de sa variable controle. C en créant le parent que je cré la classe du CTabCtrl et elle même cré les objets de mes onglet comme suis:

    le constructeur :
    CDlg_InsertModify_Equip_TabCtrl::CDlg_InsertModify_Equip_TabCtrl() : m_PreviousTab(0), m_MaxWidth(0), m_MaxHeight(0)
    {
    m_pDialogs[0] = &m_TabDialogAssignment;
    m_pDialogs[1] = &m_TabDialogCalibration;
    m_pDialogs[2] = &m_TabDialogTechnicalsInformations;
    m_pDialogs[3] = &m_TabDialogComments;
    //m_pDialogs[4] = &m_TabDialogxxxxxxx;
    }

    ou m_pDialogs est un tableau de pointeur de type CDialog déclaré dans le .h de la calsse du TabCtrl et par ex m_TabDialogAssignment est l'occurence objet de l'un de mes CDialog fille.

    Mais je vois ce que tu veux faire et j'ai déjà essayé sans succes car j'ai mis :

    m_InsertModify_Equip_TabCtrl.m_pDialogs[0]->m_InsertModify_Equip_Tab_Assignment_Entity_Combo.AddString("toto");

    ce qui correspond a ton exemple mais j'ai une erreur de compilation qui me dis :

    'm_InsertModify_Equip_Tab_Assignment_Entity_Combo' : is not a member of 'CDialog'

    Tu as une idée sur l'erreur ??? ou une autre solution ??

  6. #6
    Membre éprouvé
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Points : 1 067
    Points
    1 067
    Par défaut
    Est-ce que ton m_InsertModify_Equip_Tab_Assignment_Entity_Combo est bien une variable membre publique de ta classe fille de type contrôle CComboBox, et qui fait bien référence à ta ComboBox en question?

  7. #7
    Nouveau Candidat au Club
    Inscrit en
    Mai 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    bien sur ci joins la déclaration :

    Dans le ccp :
    DDX_Control(pDX, DLG_INSERTMODIFY_EQUIP_TAB_ASSIGNMENT_ENTITY_COMBO, m_InsertModify_Equip_Tab_Assignment_Entity_Combo);

    Dans le .h :
    enum { IDD = DLG_INSERTMODIFY_EQUIP_TAB_ASSIGNMENT };
    CComboBox m_InsertModify_Equip_Tab_Assignment_Entity_Combo;

  8. #8
    Membre éprouvé
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par cgod1
    'm_InsertModify_Equip_Tab_Assignment_Entity_Combo' : is not a member of 'CDialog'
    Normalement, il devrait mettre "... is not a member of 'CClasseFille'", pourquoi il met CDialog, alors que ta combobox appartient à la classe fille, elle même héritant de CDialog? Peut-être à creuser de ce côté là... Sinon, à priori, et surtout à 1h du matin , je ne vois pas ce qui pourrait poser problème...

  9. #9
    Nouveau Candidat au Club
    Inscrit en
    Mai 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    moi non plus je ne vois pas le pb et pourquoi c CDialog c bien la pb. bon tant pis je verais ça demain.

    Merci et a demain si t la pour la suite des aventures.

  10. #10
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    utilise ma classe sur le CTabCtrl et tu n'auras plus ce problème....
    http://farscape.developpez.com/Samples/CxTabCtrl.zip
    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    CDialog *pDlg;
    for(int i=0;i<MyTabCtrl.GetCount();i++)
    {
            if(!MyTabCtrl.IsTabEnabled(i)) continue; 
            pDlg=MyTabCtrl.GetDialogCtrl(i);
           ASSERT(pDlg);
           pDlg->UpdateData(TRUE);
    }
    pDlg pouvant etre casté sur la classe dialogue effective, alors l'acces aux variables devient possible...

  11. #11
    Nouveau Candidat au Club
    Inscrit en
    Mai 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Salut Farscape,

    Je n'ai pas pu te répondre avant j'étais bien occupé ces dernier temps.

    Pour ta réponse, j'ai essayer de comprendre ton CTabCtrl mais j'avoue que c un peu nébuleux.
    Saurais tu m'expliquer comment tu as pu résoudre ce pb dans ton CTabCtrl et donc comment je peux modifier mon code en se basant sur l'existant STP.

    Merci

  12. #12
    Nouveau Candidat au Club
    Inscrit en
    Mai 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 7
    Points : 1
    Points
    1
    Par défaut Help
    Quelqu'un peut il ma'aider sur le sujet ??


Discussions similaires

  1. Comment accéder aux éléments d'une sous formulaire en javascript
    Par oumelkhairat dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 25/11/2013, 17h15
  2. [Exchange 2010] Comment accéder aux dossiers publics d'Exchange 2010 depuis une application tierce ?
    Par [ZiP] dans le forum Exchange Server
    Réponses: 2
    Dernier message: 20/08/2011, 13h58
  3. comment accéder aux éléments d'une liste
    Par RouRa22 dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 07/05/2008, 14h53
  4. Réponses: 4
    Dernier message: 16/03/2007, 19h25
  5. Réponses: 3
    Dernier message: 11/12/2005, 12h15

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