Base des labels [Résolu]

- - Dernière réponse :  carak - 18 févr. 2013 à 14:28
Bonsoir à tous.

Bon j'ai attaqué le C++ sur codeblocks (en suivant le tuto sur le site du zéro).
J'ai décidé de passer sur visual c++ 2010 pour tester la programmation sur les GUI.

J'ai seulement un foutu problème que je comprends pas (3jours que je cherche sans trouver... :s)
Quand on créé un projet Windows form cela créé un fichier Form1.cpp et un Form1.h, jusque la pas de soucis.
J'ai créé plusieurs Labels dans Form1.h(design). Ce que je voudrais savoir c'est comment modifier le text d'un label (par exemple Label10) depuis le Form1.cpp. A chaque fois le compilateur m'insulte en me disant que Label10 : identificateur non déclaré.

J'ai les nerfs, mes classes sont prêtes à être utilisées me reste plus que ce détail...

Merci par avance.
P.S. : Tous les tuto que j'ai vu fesait cette manipulation seulement dans le Form1.h
Afficher la suite 

2 réponses

Meilleure réponse
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
17
3
Merci
Salut,

aucun problème particulier pour ça.
La seule chose c'est que Visual crée les méthodes d'"implémentation" dans le .h, rien ne t'empèche de les créer dans le .cpp en transformant les méthode en prototypes.
La deuxième chose importante, c'est le namespace, Visual ne le fait pas.

Ci dessous un exemple pour une Form1, un Label et un FormLoad en c++ cli.
On change le texte du label dans le FormLoad implémenté dans le .cpp :

//Form1.h
namespace CppFormTest 
{
public ref class Form1 : public System::Windows::Forms::Form
{
private: System::Windows::Forms::Label^  label1;
public:	Form1(void)
{
InitializeComponent();
}
private: void InitializeComponent(void)
{
this->label1->Name = L"label1";
// autres propriétés du label ICI
this->Load += gcnew System::EventHandler(this, &Form1::Form1_Load);
}
// proto Formload transformé "à la main"
private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e);
};
}

//Form1.cpp
#include "StdAfx.h"
#include "Form1.h"

namespace CppFormTest // NS rajouté "à la main"
{
// implémentation rajoutée "à la main"
System::Void Form1::Form1_Load(System::Object^ sender, System::EventArgs^ e) 
{
this->label1->Text = L"toto";
}
}


bye...

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 122 internautes nous ont dit merci ce mois-ci

Commenter la réponse de yann_lo_san
0
Merci
Réponse magnifique :)

Sur le coup j'avais pas saisi la notion de namespace car visual c++ (sous 2010 express), en crée un mais j'avais pas fais gaffe que dans le .cpp il utilise le namespace mais ne travail pas directement dedans.
(Bon ok j'ai aussi acheté les bouquins sur le c++ que j'ai lus , ça aide :p)

Pour conclure si certains ont le même problème que moi .
En ayant un projet windows form de base (donc juste la Form1 du départ) :
1) Insérez un label quelconque avec la boite à outil

2) insérez la ligne : this->Load += gcnew System::EventHandler(this, &Form1::Form1_Load); dans void InitializeComponent(void)

3) insérez la ligne : private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e); avant la fermeture de la classe Form1

4) copiez:
namespace CppFormTest // NS rajouté "à la main"
{
// implémentation rajoutée "à la main"
System::Void Form1::Form1_Load(System::Object^ sender, System::EventArgs^ e)
{
this->label1->Text = L"toto";
}
}
dans votre fichier Form.cpp puis changé le nom du namespace par celui du Form.h
5) Compilez, ça marche.

J'ai voulu détailler un peu plus la manipulation à faire pour ceux et celles qui s’arrachent les cheveux car ayant commencé à tâter visual c++ tres récemment (moins d'un mois) j'ai eu du mal à comprendre le fond .

En tout Cas un grand merci à toi yann_lo_san
Commenter la réponse de carak