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

VC++ .NET Discussion :

Problème appel fonction


Sujet :

VC++ .NET

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Par défaut Problème appel fonction
    Bonjour,

    voilà, mon problème n'est pas tellement un problème de code mais plutot de conception. Je reprend un projet dans lequel j'ai une windows form (Form1) qui inclue une classe graphique.

    Lors du clic sur Form1::Graphique, je crée un objet graphique et j'appelle le constructeur de cette classe. Cela me crée une nouvelle form sur laquelle j'ai un bouton. Ce que je veux maintenant réussir à faire c'est récupérer la valeur de radiobutton (true/false qui se trouvent dans ma form graphique) dans form1.

    C'est peut être évident mais là je ne vois pas comment faire... je ne peux pas appeler une méthode de form1 dans ma méthode Graphique::button1_click()...

    Merci

  2. #2
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Citation Envoyé par Elstak Voir le message
    Bonjour,

    voilà, mon problème n'est pas tellement un problème de code mais plutot de conception. Je reprend un projet dans lequel j'ai une windows form (Form1) qui inclue une classe graphique.

    Lors du clic sur Form1::Graphique, je crée un objet graphique et j'appelle le constructeur de cette classe. Cela me crée une nouvelle form sur laquelle j'ai un bouton. Ce que je veux maintenant réussir à faire c'est récupérer la valeur de radiobutton (true/false qui se trouvent dans ma form graphique) dans form1.

    C'est peut être évident mais là je ne vois pas comment faire... je ne peux pas appeler une méthode de form1 dans ma méthode Graphique::button1_click()...

    Merci
    A priori, il faudrait que chaque Graphique sache à quel Form il appartient, par exemple via un pointeur / une référence vers Form passé dans le constructeur de Graphique.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Par défaut
    Oui je pensais à ca à la base mais je m'étais dit qu'il devait y avoir quelque chose de plus simple à faire... mais bon peut etre pas finalement... je vais partir là dessus donc.

    merci

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Par défaut
    Hmmm,

    j'ai un petit soucis. J'ai ajouté un attribut à la classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System::Windows::Forms::Form * pForm1;
    J'ai changé mon constructeur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Graphique(System::Windows::Forms::Form * fenetrePrincipale )
    		{
    			...
    			pForm1 = fenetrePrincipale;
    			...
    		}
    donc pForm1 est mon pointeur sur ma fenetre principale. Dans Form1 j'ai déclaré une méthode "test" public, mais dans une méthode de Graphique je n'arrive pas à y accéder depuis pForm1. C'était pourtant bien comme ça qu'il fallait faire quand tu me parlais d'utiliser un pointeur sur ma Form?

  5. #5
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Oui c'était comme ça et ça devrait marcher. Quelle est l'erreur de compilation ?

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Par défaut
    Et bien disons que je n'arrive pas à accéder à ma méthode "test" que j'ai créé dans Form1.

    Dans ma méthode qui se trouve dans Graphique, quand je fais pForm1 je n'ai pas accès à "test". Peut être que ma syntaxe est mauvaise mais j'ai tenté un:

    mais il n'aime pas... il me dit :

    -pForm1 n'est pas un nom de classe ni d'espace de noms
    -test : identificateur introuvable

    je pense qu'il ne fait pas bien le lien entre Form1 et le pointeur... je vois pas là

  7. #7
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Tu peux poster le code de test() et le code de ta classe Graphique (du moins que l'essentiel) ?


  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Par défaut
    En fait pour le moment, test est vide et son retour est de type void... c'est juste pour tester

    Sinon ma classe graphique est assez longue car il y a tout le code généré (initializeComponents)... au niveau du constructeur j'ai ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    //constructeur du graphique
    Graphique(System::Windows::Forms::Form * fenetrePrincipale )
    {
    	InitializeGraphique();
    	this->Size=System::Drawing::Size(550, 500);
    	CalculeGraphique(0);		
    	this->Show();
    	pForm1 = fenetrePrincipale;
    	tabRadioH = new bool[7];
    }
    et au niveau des attributs j'ai mis ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    //pointeur sur Form1 pour passer les valeurs des RadioButton
    System::Windows::Forms::Form * pForm1;
    et dans le Form1.h il y a bien ca:

    et:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public: void test();
    si tu veux plus de détails sur un bout de code en particulier dis le moi.... je pense que là j'ai tout dit, le reste n'a rien à voir directement avec le problème...

  9. #9
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Est-ce que dans Graphique.h tu inclues Form.h ?
    Je pense que ton problème vient de là : http://cpp.developpez.com/faq/cpp/?p...erence_croisee

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Par défaut
    nonon !

    j'inclue jsute une autre classe qui n'a aucun lien avec Form1 (qui n'inclue rien du tout meme) dans Graphique

    EDIT: je viens de regarder le lien.. tu pense donc que je devrai faire ce type d'inclusion pour que ca fonctionne?


    Pour moi A correspond à la classe graphique et B à form1. J'ai donc simplement ajouté dans Graphique.cpp l'include de Form1.h, d'après la ligne suivante de la FAQ:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Form A.cpp
     
    #include "A.h" 
    #include "B.h" 
     
    // ...
    Les autres includes existent déjà.. mais là maintenant j'ai le problème d'inclusion cyclique on dirait... erreur:

    DImagerie::Graphique: redéfinition du type 'class'

    et plein d'autre erreurs qui s'en suivent

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Par défaut
    On m'a proposé une autre piste:

    ne plus passer un pointeur mais ajouter un handler sur le bouton Update de mon graphique (l'ajouter dans form1).

    J'aurais donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    System::Void Form1::bt_graphique_Click(System::Object*  sender, System::EventArgs*  e)
    {
    	Histogramme* graphique = new Histogramme(this);
    	//graphique->AddHandle(btUpdate);
     
    }
    j'ai mis la ligne en comentaitre car je sais pas du tout la syntaxe (ni si ca ira). Si quelqu'un a deja fait ca... jveux bien un petit exemple

    EDIT : je vais ouvrir un post qui traite du problème du handle avec un titre adapté

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Par défaut
    je viens de trouver

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    graphique->button1->Click += new System::EventHandler(this, &Form1::test);
    et j'arrive à appeler test en cliquant sur mon bouton update

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème appel fonction d'une DLL
    Par xEndLe dans le forum Interfaçage autre langage
    Réponses: 1
    Dernier message: 04/05/2012, 17h08
  2. [XL-2000] Problème appel fonction
    Par keks42 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 24/02/2010, 12h37
  3. [OL-2003] Problème appel fonction
    Par ptitemeuh dans le forum VBA Outlook
    Réponses: 0
    Dernier message: 04/02/2010, 15h26
  4. [OL-2003] Problème appel fonction
    Par ptitemeuh dans le forum Outlook
    Réponses: 0
    Dernier message: 04/02/2010, 15h26
  5. [PHP-JS] problème appel fonction javascript
    Par OLman135 dans le forum Langage
    Réponses: 5
    Dernier message: 14/05/2009, 21h30

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