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 :

[Débutant] Initialisation d'attributs.


Sujet :

VC++ .NET

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 61
    Points : 23
    Points
    23
    Par défaut [Débutant] Initialisation d'attributs.
    Bonjour,

    J'aimerais pouvoir initialiser la couleur d'un de mes composants à sa création, j'ai donc mis ce code dans le constructeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     public ref class note : public System::Windows::Forms::Form
    	{
    	public:Color couleur;
     
    	public:
    		note(void)
    		{
     
    			InitializeComponent();
    			this->richTextBox1->BackColor::set(couleur);
    Sachant que j'initialise couleur lors de la création de ma fenêtre note :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	note^ not = gcnew note();
    	 not->Show();
    	pref^ op = gcnew pref();
    	not->couleur = op->coul;
    Si vous avez des idées, parce que j'ai essayé un grand nombre de combinaisons mais sans succés. Cette version compile mais ne produit rien.

    Merci d'avance.

  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
    y a un problème dans l'utilisation de la couleur.
    tu as tout interet à faire une méthode publique pour mettre à jour la couleur.

    et ne pas oublier de redessiner le composant

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 61
    Points : 23
    Points
    23
    Par défaut
    OK, alors voilà ce que j'ai fait :
    la méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	public:System::Void chgt_coul(System::Drawing::Color couleur)
    		{
    	   	this->richTextBox1->BackColor::set(couleur);
    	        }
    L'appel lorsque je crée ma fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	note^ not = gcnew note();
    	   not->Show();
    	   pref^ op = gcnew pref();
    	   not->chgt_coul(op->coul);
    Bonne compilation mais toujours rien à l'éxécution.

  4. #4
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 61
    Points : 23
    Points
    23
    Par défaut
    C'est bon en fait mon erreur ne vient pas de là, si tu veux j'ai trois fenetre.
    La première avec laquelle je créé ma fenetre note et une autre fenetre de configuration.

    Avec la fenetre de configuration je veux définir une couleur par défaut pour ma fenêtre note mais lorsque je ferme la fenetre configuration après avoir défini la couleur, cette dernière se remet automatiquement à la valeur initiale.

    Il faut que je mémorise ma couleur dans la fenetre configuration mais je ne vois pas comment faire.

  5. #5
    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
    je comprends rien à ton problème
    mais déjà, faudrait mieux faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	public:System::Void chgt_coul(System::Drawing::Color couleur)
    		{
    	   	this->richTextBox1->BackColor = couleur;
    	        }

  6. #6
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 61
    Points : 23
    Points
    23
    Par défaut
    OK, j'ai fait la modif, alors j'explique mon problème un peu mieux :
    J'ai trois fenetre distinctes:
    Form1 : fenêtre mère avec laquelle on accède à la fenêtre de config, et avec laquelle on crée une autre fenêtre.

    note : fenêtre créé a partir de Form1.

    configuration : fenêtre de configuration d'une note dans laquelle je choisi une couleur qui s'affiche dans une pictureBox.

    form1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	private: System::Void open(System::Object^  sender, System::EventArgs^  e) {
    				 note^ not = gcnew note();
    				 not->Show();
    				 pref^ op = gcnew pref();
    				 not->chgt_coul(op->coul);
    			 }
    note :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    		public:System::Void chgt_coul(System::Drawing::Color couleur)
    			   {
    	   			this->richTextBox1->BackColor = couleur;
    			   }
    config :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	private: System::Void application(System::Object^  sender, System::EventArgs^  e) {
    				 //police = this->label5->Font;
    				 coul = pictureBox1->BackColor;
     
    				 this->Close();
    			 }
    Ce que je veux c'est que grâce à ma fenêtre de configuration je choissise une couleur qui s'applique à la note créée et qui s'enregistre comme couleur par défaut pour chaque note que je crérai ensuite.

    Désolé mais c'est difficile d'expliquer comme ça...

  7. #7
    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
    ben je sais pas, il existe cent mille facon de faire
    tu peux utiliser une variable membre de ta classe Form1 pour stocker la couleur et l'utiliser à chaque instanciation de ta note.

    Si tu as besoin que ce soit persistant, tu passes par les fichiers, etc ...

  8. #8
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 61
    Points : 23
    Points
    23
    Par défaut
    OK, j'ai peut-être une solution mais je ne sais pas comment faire :

    Je créé une variable couleurenreg dans Form1 qui contiendra la couleur de la note, mais le souci c'est que je ne sais pas comment mettre la couleur choisie (dans config) dans cette variable parceque je ne peux pas accéder à une variable de form1 à partir de config.

    J'ai essayé d'inclure Form1.h dans config mais comme config.h est inclu dans form1 ça me fait une erreur.

    Donc je voudrais savoir si je peux accéder à une variable de form1 à partir de config ?

  9. #9
    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
    oui tu peux, tu déclares en public soit ta variable, soit un accesseur
    et pour résoudre ton problème d'inclusion multiple, il faut que tu fasses une déclaration anticipée et que tu déportes le code des fonctions dans un .cpp

    va falloir que je rédige un truc dans cette optique un jour pour la faq

  10. #10
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 61
    Points : 23
    Points
    23
    Par défaut
    J'ai essayé de déclarer ma variable en public mais par exemple de la classe config je ne vois pas comment accéder à une variable de form1 ?

    Si tu peux me donner la syntaxe...

    Merci

  11. #11
    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 que ton objet config connaisse l'objet form1
    ca peut se faire de plusieurs manières, tu peux par exemple le passer dans le constructeur, ou via une méthode.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ObjetConfig objConfig = gcnew ObjetConfig(monInstanceDeForm1);
    et puis après, tu as dans ta classe config, une variable de type Form1 qui stocke la valeur passée par le constructeur

  12. #12
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 61
    Points : 23
    Points
    23
    Par défaut
    Il faut donc que config contienne un constructeur avec en paramètre une instance de Form1 ??

    Je ne comprend pas trop désolé.

    Ce que je veux c'est accéder aux variables de Form1 à partir de config sans avoir à inclure form1.h dans config, tout en sachant que config.h est inclu dans form1.

  13. #13
    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
    Citation Envoyé par Baban29
    Ce que je veux c'est accéder aux variables de Form1 à partir de config sans avoir à inclure form1.h dans config
    tu ne peux pas, d'une manière ou d'une autre, il faut que les objets se connaissent
    Il faut que tu déclares les classes de manière anticipées, comme expliqué plus haut

  14. #14
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 61
    Points : 23
    Points
    23
    Par défaut
    OK, alors je dois déclarer form1.h dans config.cpp et ensuite le code d'accès aux variables de form1 doit se faire dans le cpp ?

    Ce que je ne saisis pas c'est que dans le .cpp de config je n'est plus accès aux composant de la fenêtre config.

  15. #15
    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 dois inclure les .h dans les .h
    et n'oublie pas de remettre le namespace dans le .h et d'utiliser l'opérateur de résolution de portée

  16. #16
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 61
    Points : 23
    Points
    23
    Par défaut
    OK, mais mon souci c'est que conf.h est inclue dans form.h, donc comment je peux accéder aux variables de form à partir de conf sachant que je ne peux pas inclure form.h dans conf.h (erreur de profondeur d'inclusions).

    Je ne sais pas si je me fais bien comprendre...

  17. #17
    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
    Citation Envoyé par Baban29
    OK, mais mon souci c'est que conf.h est inclue dans form.h, donc comment je peux accéder aux variables de form à partir de conf sachant que je ne peux pas inclure form.h dans conf.h (erreur de profondeur d'inclusions).

    Je ne sais pas si je me fais bien comprendre...
    c'est cette "profondeur d'inclusions" que tu dois résoudre
    en incluant une unique fois chaque fichier (pragma once)
    et en faisant des déclarations anticipées

    voir dans ce post, il y a un exemple http://www.developpez.net/forums/sho...d.php?t=247681

  18. #18
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 61
    Points : 23
    Points
    23
    Par défaut
    Bon j'ai essayé ce que tu m'as indiqué mais je n'arrive toujours pas.

    J'ai fait une petite application de test reprenant les grandes lignes de mon projet, pourrait-tu si tu as le temps régler mon problème, c'est à dire dans cette application appliquer la couleur choisie dans conf a note. Je te joint donc les .cpp et les .h.

    Merci beaucoup de m'aider.
    Fichiers attachés Fichiers attachés

  19. #19
    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
    t'y es presque

    tu as juste à rajouter dans ton conf.h un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private: System::Drawing::Color ^couleur;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    	// Update the text box color if the user clicks OK 
    	if (colorDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK)
    	{
    		pictureBox1->BackColor =  colorDialog1->Color;
    		couleur = colorDialog1->Color;
    	}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    			 public: Drawing::Color ^ getColor(){
    						 return couleur;
    					 }
    dans ta form1.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    	private: System::Void open_conf(System::Object^  sender, System::EventArgs^  e) {
    				conf^ pref = gcnew conf();
    				pref->ShowDialog();
    				coul = pref->getColor();
     
    			 }
    	private: System::Void open(System::Object^  sender, System::EventArgs^  e) {
    				 note^ not = gcnew note(coul); /*coul est la couleur que l'on as choisi dans la fenetre conf*/
    				 not->Show();
    			 }
    et d'utiliser des handles à la place d'objet pour coul par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    private:Color ^coul;
    et ainsi, dans ton constructeur de note, tu peux faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	private:Color ^couleurnote;
    		note(Color ^ col){
    			this->couleurnote = col;
    			InitializeComponent();
    		}
    et après, tu construis ta note

  20. #20
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 61
    Points : 23
    Points
    23
    Par défaut
    Merci beaucoup j'ai enfin réussi.

    Heureusement que tu étais là...

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 13/12/2005, 09h52
  2. [débutant][XSL][FOP] Attribut à partir d'un paramètre XML
    Par drinkmilk dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 03/03/2005, 09h41
  3. [Débutant] Initialiser zone de texte via un tableau
    Par Theseus dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 27/01/2005, 10h19
  4. Réponses: 3
    Dernier message: 17/12/2003, 11h26

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