none
appelle de form en c++ RRS feed

  • Question

  • Salutation a tout le monde

    Voila je vien tout juste de commencer en VC++ avec la version express 2008
    mon problême est que je n'arrive pas a faire cette simple commande
    entre une forme et une autre

    explication:

    jai une form que j'appelle frmMain et une autre appelont la  frmA
    comment je peut appeler la frmA a partir de frmMain.

    La je suis un peut gèner par ca. j'ai beau essayer tout ce que j'ai vu sur le net
    mais ca fonctionne pas et la je sais plus ou allé.

    Qelqu'un pour m'aider 

    Merci


    BigDan
    mardi 29 septembre 2009 22:01

Réponses

  • Vous devez avoir un passé VB, non ?

    VC++ en version express, ne contient pas les MFC, je crois.
    On va donc faire l'assertion que ce sont des Formulaires WinForms.
    Vous êtes donc dans du code C++/CLI (code .NET ou code managé, c'est pareil).

    Etes-vous à l'aise avec la conception objet (référence à l'hypothétique background VB).

    Si oui, vous n'avez qu'à instancier un nouvel objet de type frmA (frmA est une classe pas un objet ou un formulaire).
    C'est le mot clé gcnew qui sert à instancier un objet de type frmA.
    Une fois l'objet de type frmA instancié, il suffit d'appeler sa méthode "Show" pour le voir s'afficher.

    Si vous n'êtes pas à l'aise avec la programmation objet :

    Dans une méthode de l'objet formulaire de type frmMain :

    frmMain^ toto = gcnew frmA();
    toto->Show();
    ou encore plus concis:
    gcnew frmA()->Show();




    Paul Bacelar, Ex - MVP VC++
    • Marqué comme réponse DanielMorais mercredi 30 septembre 2009 17:06
    mercredi 30 septembre 2009 08:07
    Modérateur
  • Vous devez avoir un passé VB, non ?

    VC++ en version express, ne contient pas les MFC, je crois.
    On va donc faire l'assertion que ce sont des Formulaires WinForms.
    Vous êtes donc dans du code C++/CLI (code .NET ou code managé, c'est pareil).

    Etes-vous à l'aise avec la conception objet (référence à l'hypothétique background VB).

    Si oui, vous n'avez qu'à instancier un nouvel objet de type frmA (frmA est une classe pas un objet ou un formulaire).
    C'est le mot clé gcnew qui sert à instancier un objet de type frmA.
    Une fois l'objet de type frmA instancié, il suffit d'appeler sa méthode "Show" pour le voir s'afficher.

    Si vous n'êtes pas à l'aise avec la programmation objet :

    Dans une méthode de l'objet formulaire de type frmMain :

    frmMain^ toto = gcnew frmA();
    
    toto->Show();
    
    
    ou encore plus concis:
    gcnew frmA()->Show();
    
    




    Paul Bacelar, Ex - MVP VC++

    Ok Merci pour cette reponse mais j'ai déja essayer ca et je recois toujours la meme reponse du comp:

     

    frmMain^ frmA = gcnew frmA();
    frmA->Show();

    erreur est la suivante:

     Erreur 1 error C2061: erreur de syntaxe : identificateur 'frmA' c:\documents and settings\daniel morais\mes documents\visual studio 2008\projects\c++\test1\test1\frmMain.h 88

    et j'ai beau essayer la facon tu a ecrit et j'obtien la meme erreur

    Aurais-je oublie  quelque chose?

    Merci

     


    BigDan
    • Marqué comme réponse DanielMorais mercredi 30 septembre 2009 17:05
    mercredi 30 septembre 2009 14:47
  • Oups des coquilles: FormA est-il bien le nom de la CLASSE du formulaire à créer ?


    FormA^ toto = gcnew FormA();
    toto->Show();



    gcnew FormA()->Show();


    Par convention, les noms des classes commencent par une majuscule et les noms des instances d'objets sont en minuscule.
    Paul Bacelar, Ex - MVP VC++
    • Marqué comme réponse DanielMorais mercredi 30 septembre 2009 17:07
    mercredi 30 septembre 2009 15:47
    Modérateur
  • Merci encore mais finallement j'ai trouvé

    Simple

     

    frmA^ frmA = gcnew Test1::frmA();
    frmA->Show(); 
    
    et non 
    
    
    frmMain^ frmA = gcnew frmA();
    frmA->Show(); 

    il me sufisait de ajouté le namespace de mon projet (Test1)
    et de remplacer frmMain par frmA et ca fonctionne
    parcompte je comprend pas pourquoi.
    Merci

     


    BigDan
    • Marqué comme réponse DanielMorais mercredi 30 septembre 2009 17:05
    • Modifié DanielMorais mercredi 30 septembre 2009 17:14 Ajout
    mercredi 30 septembre 2009 17:05

Toutes les réponses

  • Vous devez avoir un passé VB, non ?

    VC++ en version express, ne contient pas les MFC, je crois.
    On va donc faire l'assertion que ce sont des Formulaires WinForms.
    Vous êtes donc dans du code C++/CLI (code .NET ou code managé, c'est pareil).

    Etes-vous à l'aise avec la conception objet (référence à l'hypothétique background VB).

    Si oui, vous n'avez qu'à instancier un nouvel objet de type frmA (frmA est une classe pas un objet ou un formulaire).
    C'est le mot clé gcnew qui sert à instancier un objet de type frmA.
    Une fois l'objet de type frmA instancié, il suffit d'appeler sa méthode "Show" pour le voir s'afficher.

    Si vous n'êtes pas à l'aise avec la programmation objet :

    Dans une méthode de l'objet formulaire de type frmMain :

    frmMain^ toto = gcnew frmA();
    toto->Show();
    ou encore plus concis:
    gcnew frmA()->Show();




    Paul Bacelar, Ex - MVP VC++
    • Marqué comme réponse DanielMorais mercredi 30 septembre 2009 17:06
    mercredi 30 septembre 2009 08:07
    Modérateur
  • Vous devez avoir un passé VB, non ?

    VC++ en version express, ne contient pas les MFC, je crois.
    On va donc faire l'assertion que ce sont des Formulaires WinForms.
    Vous êtes donc dans du code C++/CLI (code .NET ou code managé, c'est pareil).

    Etes-vous à l'aise avec la conception objet (référence à l'hypothétique background VB).

    Si oui, vous n'avez qu'à instancier un nouvel objet de type frmA (frmA est une classe pas un objet ou un formulaire).
    C'est le mot clé gcnew qui sert à instancier un objet de type frmA.
    Une fois l'objet de type frmA instancié, il suffit d'appeler sa méthode "Show" pour le voir s'afficher.

    Si vous n'êtes pas à l'aise avec la programmation objet :

    Dans une méthode de l'objet formulaire de type frmMain :

    frmMain^ toto = gcnew frmA();
    
    toto->Show();
    
    
    ou encore plus concis:
    gcnew frmA()->Show();
    
    




    Paul Bacelar, Ex - MVP VC++

    Ok Merci pour cette reponse mais j'ai déja essayer ca et je recois toujours la meme reponse du comp:

     

    frmMain^ frmA = gcnew frmA();
    frmA->Show();

    erreur est la suivante:

     Erreur 1 error C2061: erreur de syntaxe : identificateur 'frmA' c:\documents and settings\daniel morais\mes documents\visual studio 2008\projects\c++\test1\test1\frmMain.h 88

    et j'ai beau essayer la facon tu a ecrit et j'obtien la meme erreur

    Aurais-je oublie  quelque chose?

    Merci

     


    BigDan
    • Marqué comme réponse DanielMorais mercredi 30 septembre 2009 17:05
    mercredi 30 septembre 2009 14:47
  • Oups des coquilles: FormA est-il bien le nom de la CLASSE du formulaire à créer ?


    FormA^ toto = gcnew FormA();
    toto->Show();



    gcnew FormA()->Show();


    Par convention, les noms des classes commencent par une majuscule et les noms des instances d'objets sont en minuscule.
    Paul Bacelar, Ex - MVP VC++
    • Marqué comme réponse DanielMorais mercredi 30 septembre 2009 17:07
    mercredi 30 septembre 2009 15:47
    Modérateur
  • Merci encore mais finallement j'ai trouvé

    Simple

     

    frmA^ frmA = gcnew Test1::frmA();
    frmA->Show(); 
    
    et non 
    
    
    frmMain^ frmA = gcnew frmA();
    frmA->Show(); 

    il me sufisait de ajouté le namespace de mon projet (Test1)
    et de remplacer frmMain par frmA et ca fonctionne
    parcompte je comprend pas pourquoi.
    Merci

     


    BigDan
    • Marqué comme réponse DanielMorais mercredi 30 septembre 2009 17:05
    • Modifié DanielMorais mercredi 30 septembre 2009 17:14 Ajout
    mercredi 30 septembre 2009 17:05
  • frmA^ frmA = gcnew Test1::frmA();
    frmA->Show();


    Je vous conseil vivement de faire commencer vos nom de classe par une majuscule.
    Donc la classe "frmA" devient "FrmA"

    le code devient

    FrmA^ frmAInst = gcnew Test1::FrmA();
    frmAInst->Show();

    FrmA est la classe, frmAInst est une instance d'objet de type FrmA.
    A la première ligne,
    FrmA^ frmAInst -> vous déclarez une variable de nom "frmAInst" de type référence d'objet managé (.NET) FrmA (la référence managé est symbolisé par ^)
    gcnew Test1::FrmA(); -> gcnew c'est comme le new du C++ mais pour la création d'objet .NET, vous avez donc créé un objet de type FrmA.

    frmAInst->Show(); -> maintenant, vous appelez la méthode "Show" de l'objet .NET dont la référence est stockée dans la variable frmAInst.

    Appeler la méthode Show sur un objet formulaire le rend visible.
    Paul Bacelar, Ex - MVP VC++
    mercredi 30 septembre 2009 19:39
    Modérateur