Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1241 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Passer une variable d'une fenêtre à une autre

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Passer une variable d'une fenêtre à une autre

n°311575
haazheel
Posté le 17-02-2003 à 21:23:38  profilanswer
 

Bonsoir,
 
Alors voilà mon problème:
 
Je travaille avec Borland C++ Builder, et dans le fichier .cpp de ma fenêtre principale, je vais chercher des infos dans un fichier .ini
 

Code :
  1. TIniFile *ConfIni;
  2.         ConfIni = new TIniFile(ChangeFileExt(Application->ExeName,".ini" ));
  3.         INIRepEquipes = ConfIni->ReadString("Options","RepEquipes",ExtractFileDir(Application->ExeName) + "\\Equipes" );
  4.         INIRepStats = ConfIni->ReadString("Options","RepStats",ExtractFileDir(Application->ExeName) + "\\Stats" );
  5.         delete ConfIni;
  6.         ShowMessage(INIRepEquipes);


 
Bon, là ca marche, j'arrive à récupérer et à afficher INIRepEquipes par exemple.
 
Là où ça marche plus, c'est que j'ouvre une nouvelle fenêtre où je dois récupérer ces valeurs issues du INI, et là ça marche pas.
 
Code pour l'ouverture de la fenêtre:

Code :
  1. EditEquipeForm = new TEditEquipeForm(this);
  2. EditEquipeForm->ShowModal();
  3. delete EditEquipeForm;


 
Et quand j'utilise la variable INIRepEquipes, il me met l'erreur suivante:
 
Symbole 'INIRepEquipes' non défini
 
Pourtant je fais bien un include du .h de la fenêtre principale, là où sont déclarés ces fameuses variables:
 

Code :
  1. AnsiString NomFichier,INIRepEquipes,INIRepStats;


 
Quand je tente de redéfinir ces valeurs dans le .h de la nouvelle fenêtre, elles ont perdu leur valeur.
 
Comment je peux faire passer des variables d'une fenêtre à une autre?
 
Merci d'avance!!

mood
Publicité
Posté le 17-02-2003 à 21:23:38  profilanswer
 

n°311592
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 17-02-2003 à 21:42:49  profilanswer
 

Pour passer des variables d'une classe à l'autre, il faut écrire des fonctions get/set !
 
Ainsi, dans ta classe de fenêtre principale, tu écris une fonction du genre :
 

Code :
  1. AnsiString Fenetre::getVariable()
  2. {
  3.    return INIRepEquipes;
  4. }


 
Et dans la classe de ta fenêtre fille, tu appelles tout simplement cette fonction :
 

Code :
  1. AnsiString INIRepEquipes = parent->getVariable();


---------------
J'ai un string dans l'array (Paris Hilton)
n°311654
haazheel
Posté le 17-02-2003 à 22:58:32  profilanswer
 

Merci beaucoup!!
 
Dur dur d'apprendre le C++ sur le tas... :sarcastic:  :whistle:

n°311673
haazheel
Posté le 17-02-2003 à 23:11:54  profilanswer
 

Et dans le même ordre d'idées, comment tu modifierais cette fonction pour qu'elle ne se limite pas juste à INIRepEquipes?
 
Je ne sais pas encore passer de paramètres à une fonction, donc là je patauge un peu... :(  
 
Parce que j'imagine que si une fenêtre doit envoyer plusieurs variables, on code pas autant de fonctions que de variables?
 
Pour qu'elle fasse (je pense pas que ce soit bon):
 

Code :
  1. AnsiString Fenetre::getVariable(VariableAEnvoyer)
  2. {
  3.   return VariableAEnvoyer;
  4. }


 
Mais également pas seulement pour les AnsiString, mais pour tout!
 
Parmi bool, void (je sais même pas comment on appelle ça :??: :lol: ), lequel est adapté pour tous?
 
Et par la suite, la réception de cette variable:
 

Code :
  1. AnsiString VariableARecevoir= parent->getVariable(VariableAEnvoyer);


 
Merci d'avance!! :jap:

n°311730
HelloWorld
Salut tout le monde!
Posté le 18-02-2003 à 02:58:58  profilanswer
 

Dans une classe, il vaut mieux toujours imposer de passer par des methodes get/set que d'offrir un acces direct à une propriété, même s'il n'y a aucune contrainte sur cette propriété.
ex :

Code :
  1. class A
  2. {
  3. public:
  4.     int Valeur;
  5. };
  6. //mieux vaut utiliser :
  7. class A
  8. {
  9. public:
  10.     inline int  GetValeur( void ) { return _Valeur; }
  11.     inline void SetValeur( int V ) { _Valeur = V; }
  12. private:
  13.     int _Valeur;
  14. };


 
La 2° solution est bcp plus évolutive.
Car si, soudain, pour une version XXX de ta classe, tu as besoin de mettre une contrainte sur Valeur ( >0 par exemple) ou changer son type, avec la première solution, les millions de lignes de codes qui utilisent ta classe devront être modifiées avec la première version, alors que seule ta classe le devra avec la 2°.
Exemple : changer Valeur en double.

Code :
  1. class A
  2. {
  3. public:
  4.     inline int    GetValeur( void ) { return int( _Valeur ); }
  5.     inline void   SetValeur( int V ) { _Valeur = double( V ); } // hihi, double V ! :)
  6.     inline double GetValeur( void ) { return _Valeur; }
  7.     inline void   SetValeur( double V ) { _Valeur = V; }
  8. private:
  9.     double _Valeur;
  10. };


Et voila, tout code basé sur l'ancienne version compile sans erreur/warning avec cette nouvelle.
Ca c'etait la parenthese.
Pour passer un param à une fonction, rien de sorcier :
tu mets le type du paramètre suivi de son nom dans les parenthèses.
Si y'a plusieurs paramètres, tu les sépare par de virgules.

Code :
  1. void Fonction( int P1, char P2, float P3 );


Tu les utilises dans la fonction comme des variables classiques.
 

Citation :

Parce que j'imagine que si une fenêtre doit envoyer plusieurs variables, on code pas autant de fonctions que de variables?


 
Qu'entends-tu par envoyer ?
Tu veux surement dire renvoyer la valeur de plusieurs de ses propriétés.
Dans ce cas oui, il vaut mieux faire une methode par propriété.
Car si on n'en veut qu'une, ça impose de quand meme demander les autres.

Code :
  1. Fenetre F;
  2. int a = F.GetA();
  3. int b = F.GetB();
  4. int c = F.GetC();
  5. // c'est pas tellement différent de :
  6. a = F.a;
  7. b = F.b;
  8. c = F.c;
  9. // si ça t'embête vraiment, tu peux faire
  10. F.GetABC( a, b ,c );
  11. // mais personnelement je te le déconseille


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°311804
haazheel
Posté le 18-02-2003 à 10:32:08  profilanswer
 

Donc dans la fenêtre enfant, il vaut mieux récupérer la variable INIRepEquipes de cette manière:
 

Code :
  1. AnsiString INIRepEquipes = MainForm->GetVariable();


 
que comme ceci:
 

Code :
  1. AnsiString INIRepEquipes = MainForm->INIRepEquipes;


 
C'est bien ça?
 
Et donc le fichier H de ma fenêtre prinicpale, comment se passent les déclarations?
Moi j'ai ça:
 

Code :
  1. private: // Déclarations de l'utilisateur
  2. public:  // Déclarations de l'utilisateur
  3.         int temps,Nombre;
  4.         AnsiString NomFichier,INIRepEquipes,INIRepStats;
  5.         __fastcall TMainForm(TComponent* Owner);
  6.         bool __fastcall IniExist();
  7.         bool __fastcall XMLEquipeExist();
  8.         AnsiString GetVariable();


 
Si j'ai compris, je devrais donc plutôt avoir quelque chose du genre:
 

Code :
  1. private: // Déclarations de l'utilisateur
  2. AnsiString INIRepEquipes,INIRepStats;
  3. public:  // Déclarations de l'utilisateur
  4.         int temps,Nombre;
  5.         AnsiString NomFichier;
  6.         __fastcall TMainForm(TComponent* Owner);
  7.         bool __fastcall IniExist();
  8.         bool __fastcall XMLEquipeExist();
  9.         AnsiString GetVariable();


 
C'est ça?
 
Et donc quand une fenêtre enfant veut récupérer des valeurs de variables déclarées dans la fenêtre parent, on est obligé d'écrire autant de fonctions get/set qu'il y a de variables...
Dans le cas de nombreuses variables à récupérer, comment on fait?
 
Parce qu'en fait je voudrais récupérer des infos se trouvant dans le INI. Je récupére ces infos dans la fenêtre principale, et je dois les réutiliser dans une fenêtre enfant, et plus tard je devrai également les utiliser dans d'autres fenêtres...
 
Ca serait pas plus simple, dans la fenêtre principale, de récupérer toutes les valeurs dont j'ai besoin, de les rentrer dans un tableau (ou bien dans une List, ou une StringList) et d'écrire un get pour récupérer le tableau?


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Passer une variable d'une fenêtre à une autre

 

Sujets relatifs
variable partagée [C] [résolu]variable statique en JS
[MFC] Comment savoir si une fenêtre MDI est partiellement visible ???affectation de variable PHP -> vers var JS
[php] Execution d'un script en standalone: passer une variable?URL dans une nouvelle fenêtre et HTML 4.01 strict
Passer des HASH TABLE de scripts CGI en scripts CGIVariable differente dans la 4.2
[Apache / PHP] Problème de transmission de variable avec mod_rewrite 
Plus de sujets relatifs à : Passer une variable d'une fenêtre à une autre


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR