Base des labels

Résolu
carak - 15 févr. 2013 à 19:31
 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

2 réponses

yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
16 févr. 2013 à 17:20
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...
3
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
0
Rejoignez-nous