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

Visual C++ Discussion :

Variable global utilisable dans plusieurs Forms


Sujet :

Visual C++

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 14
    Points : 6
    Points
    6
    Par défaut Variable global utilisable dans plusieurs Forms
    Bonjour,

    Je suis débutant en Visual C++.
    J'utilise les winforms.

    J'ai réalisé un programme simple composé d'un bouton sur la form1. Lorsque j'appui sur celui-ci, il m'ouvre la Form2.

    Le problème est que je ne sais pas comment faire pour déclarer une variable capable d'être modifié à la fois pas Form1.h et par Form2.h

    Je pense qu'il faut déclarer une variable global, mais je ne sais pas ou il faut le faire.

    Merci pour votre aide.

  2. #2
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    le mieux est de faire passer les variables entre les forms pour modifier leurs valeurs

    tu peux t'inspirer de ce qu'il y a dans la faq C++/CLI http://dotnet.developpez.com/faq/cpp...sspublicmethod
    http://dotnet.developpez.com/faq/cpp...s#crossinclude
    http://dotnet.developpez.com/faq/cpp...andleParameter

    pour ce qui est des variables globales : http://dotnet.developpez.com/faq/cpp...ariableGlobale

    mais à mon avis, ce n'est pas la bonne solution

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Merci, j'ai réussi a faire ce que je voulais grace à la variable global.

    J'ai lu a plusieurs endroit que ce n'est effectivement pas une bonne solution de créer une variable global, mais est-ce que vous savez pourquoi, parce que c'est ce qui semble le plus simple pour ce genre d'application, non ?

  4. #4
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    on ne peut pas généraliser en disant que les variables globales c'est mal.

    Cependant, dans ce genre d'utilisation, dans une vision objet, il n'y a que les deux forms qui doivent connaitre la variable, on utilise donc le passage de paramètres pour qu'elles puissent connaitre et modifier la variable

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    D'accord. Merci

    Par contre, est-ce que vous savez comment déclarer un tableau de manière global ?

    Merci

  6. #6
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    de la meme facon, sauf qu'on utilise un tableau http://dotnet.developpez.com/faq/cppcli/?page=array

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Je sais utiliser un tableau dans une form, mais je n'arrive pas à en utiliser un de manière global.

    En effet, j'ai fait la chose suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    public ref class variables
    {
    private:
    array<int> ^tableau;
     
    public:
    variables()
    {
    // Constructeur de la class variable
    tableau=gcnew array<int>(10);
    }
     
    static property int ^Tableau
       {
     
       }
    }
    mais je ne sais pas trop ce qu'il faut mettre dans "static property int ^Tableau".
    J'ai bien essayé de faire des fonctions pour passager des paramètres à différents endroit du tableau, mais ca ne fonctionne pas. J'ai des erreurs qui me disent que je n'ai pas le droit de faire cela ici.

    Je n'ai pas mon programme ici, donc je ne peux pas vous en dire plus sur les erreurs de compilations, mais je vous donnerez plus d'info dès mardi.

    Merci pour votre aide

  8. #8
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    il faut aussi que le tableau soit déclaré en static, comme indiqué dans la faq

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Oui, c'est exacte, je l'avais fait.

    Bon, tout compile correctement. Le problème, c'est que je ne sais pas de quel façon remplir la partie public c'est à dire le static property, car tout ce que j'ai essayé ne fonctionnait pas.

    J'ai toujours les erreurs suivantes : error C3903 : Does not have set or get méthod

    Aurriez vous une idée ?


    De plus, pourriez vous m'indiquer à quoi sert le ^ dans le code ?
    (Je connais bien les pointeurs(*), mais pas ^)

  10. #10
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    using namespace System;
     
    public ref class MaClasseGlobale
    {
    private:
       static array<int> ^tableauEntier;
    public:
       static property array<int> ^ TableauEntier
       {
    		array<int> ^ get()
    		{
    			return tableauEntier;
    		}
     
    		void set(array<int> ^ value)
    		{
    			tableauEntier = value;
    		}
     
       }
    };
     
    int main(array<System::String ^> ^args)
    {
    	MaClasseGlobale::TableauEntier = gcnew array<int>(10);
    	for (int i = 0 ; i < MaClasseGlobale::TableauEntier->Length ; i++)
    		MaClasseGlobale::TableauEntier[i] = i;
    	for (int i = 0 ; i < MaClasseGlobale::TableauEntier->Length ; i++)
    		Console::WriteLine(MaClasseGlobale::TableauEntier[i]);
        return 0;
    }
    n'hésitez pas à consulter la faq C++/CLI http://dotnet.developpez.com/faq/cpp...syntaxe#handle
    ou mes tutoriels sur le sujet

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Merci beaucoup pour votre aide.

    J'ai juste une petit problème. Lorsque je fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MaClasseGlobale::TableauEntier[i] = i;
    Le tableau ne se met pas à jour, car lorsque je regarde en mode pas à pas, il m'envoi dans le fonction get au lieu de la fonction set.

    Ou est le problème ?

  12. #12
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    tu rentres dans le get parce que tu accèdes à l'objet de la classe, et tu récupères une référence, donc quand tu mets une valeur dans le tableau, le tableau de la classe se met à jour

    ainsi, il est correct de faire ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for (int i = 0 ; i < MaClasseGlobale::TableauEntier->Length ; i++)
        MaClasseGlobale::TableauEntier[i] = MaClasseGlobale::TableauEntier[i] + 1;
    meme si tu passes uniquement dans le get
    le set te sert à faire l'initialisation

    après, il y a d'autres facons de faire, tout dépend de ton objectif

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Mon objectif est simplement de pouvoir entrer une valeur à l'endroit voulue dans le tableau.
    Je veux par exemple pouvoir faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaClasseGlobale::TableauEntier[3] = 152;
    Mais, quand je regarde en pas à pas, après être passé à cette instruction, le tableau est toujours plein de 0. Le 152 n'est pas pris en compte.

    Je ne comprend pas pourquoi.

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Désolé, je n'ai rien dit.

    Effectivement, ça fonctionne.

    Je vous remercie beaucoup pour toutes vos réponses.

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/04/2015, 18h38
  2. variable a utiliser dans plusieurs modules
    Par davenne.benoit dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/05/2010, 10h23
  3. Réponses: 4
    Dernier message: 15/02/2010, 17h02
  4. [AC-2000] Mémoriser une variable pour utilisation dans plusieurs procédures
    Par P'tit aviateur dans le forum VBA Access
    Réponses: 6
    Dernier message: 03/07/2009, 10h49
  5. Réponses: 18
    Dernier message: 31/05/2006, 17h48

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