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

C++ Discussion :

Modifier une classe par une autre classe


Sujet :

C++

  1. #1
    Membre habitué Avatar de Couz02
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    232
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 232
    Points : 182
    Points
    182
    Par défaut Modifier une classe par une autre classe
    Bonjour,

    Je veux modifier une valeur dans ma classe à l'aide d'une autre classe mais je ne sais pas comment faire dépendre une classe d'une autre, j'ai entendu parler d'héritage, de l'attribut "friend" aussi mais sans succès.

    Si quelqu'un veut bien m'aider un peu, ce serai sympa

  2. #2
    Membre habitué
    Inscrit en
    Avril 2008
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 155
    Points : 158
    Points
    158
    Par défaut
    tu peux créer des fonction publiques "get" et "set" pour les attributs de ta classe.
    comme ca tu peux utiliser ces fonctions dans une autre classe pour modifier ces attributs.

    ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     float maclasse::set_val(const float val)
    {
        m_val= val;  
        return(1);
    }
    et dans ton autre classe tu utilise

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     ma_methode()
    {
     objet_de_maclasse.set_val(123);
    }
    ====

  3. #3
    Membre habitué Avatar de Couz02
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    232
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 232
    Points : 182
    Points
    182
    Par défaut
    c'est un peu flou.
    En fait, j'ai une textebox que je souhaite modifier à traver ma classe.

  4. #4
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 95
    Points : 110
    Points
    110
    Par défaut
    Salut,

    Comme le disait loicounet :

    objet_textbox.setText("ton texte");

    ou plus probablement :

    pointeur_sur_textBox->setText("ton texte");

    La methode setText() n'est qu'un exemple. Tu devrais trouver l'equivalent et toutes les autres methodes disponibles pour manipuler ta textbox dans la doc de la librairie que tu utilises pour creer linterface de ton application.

    Bon courage

  5. #5
    Membre habitué Avatar de Couz02
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    232
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 232
    Points : 182
    Points
    182
    Par défaut
    Je n'arrive pas à acceder à ma textebox entierrement, j'arrive jusqu'a ma textebox mais je n'arrive pas à faire ça : matextebox->Texte = "mon texte";

    Je suis sous VS2005 en .NET

  6. #6
    Membre expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Points : 3 065
    Points
    3 065
    Par défaut
    est ce que tu as une variable correspondant à ta textbox ? si oui dans quelle classe ? quelle visibilité ? Est ce que la classe contenant la textbox est "accessible" via celle ou tu veux l'appeller ? ...

  7. #7
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 95
    Points : 110
    Points
    110
    Par défaut
    j'arrive jusqu'a ma textebox
    Il faudrait un peu de code

    Plus generalement quelle librairie graphique utilises-tu ?

    Dans sa doc tout devrait etre explique.

  8. #8
    Membre habitué Avatar de Couz02
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    232
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 232
    Points : 182
    Points
    182
    Par défaut
    J'ai 3 fichier :

    Form1.h
    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
    //...
    public ref class Form1 : public System::Windows::Forms::Form
    	{
    	public:
    		Form1(void)
    		{
    			InitializeComponent();
    			//
    			//TODO*: ajoutez ici le code du constructeur
    			//
    		}
    	private: System::Windows::Forms::Button^  buttonLancer;
    	private: System::Windows::Forms::Button^  buttonCacherProg;
     
    	private: 
    	public: 
    		maClasse Instantiation_de_ma_classe;
    //...
    	private: System::Windows::Forms::TextBox^  textBox1;
    maclasse.h
    et maclasse.cpp
    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
    //...
    try
    {
    	NetworkStream^ stream = client->GetStream();
    	Int32 Var1;
    	Var1 = stream->Read( bytesVar1, 0, bytesVar1->Length);
    	Valeur1 = System::Text::Encoding::ASCII->GetString( bytesVar1, 0, Var1 );
     
    	//Je veux modifier ma textebox à partir d'ici
     
    	MessageBox::Show(Valeur1);
    	TraiterMessage(Valeur1);
    }
    catch(Exception ^e)
    {
    	MessageBox::Show(e->Message);
    	ClientPresent = false;
    }
    //...

  9. #9
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 95
    Points : 110
    Points
    110
    Par défaut
    Impossible : la classe Form1 a un attribut public de type maclasse. Un objet de type maclasse n'a donc aucune chance de modifier un membre prive de la classe Form1.
    Ce que tu peux faire (si tu souhaites garder cette structure) c'est definir un methode publique dans la classe Form1 : setFormText(string) par exemple, et appeler cette methode dans ta classe maclasse. Dans ce cas il faut que tu passes a tout instanciation de ta classe maclasse (a la construction par exemple) un pointeur sur la classe Form1 dont cet objet sera l'attribut.
    Petite question : Que fait exactement ta classe maclasse ? Si elle sert a "controler" plus precisement ton interface Form1, il serait plu shabile de faire dervier la classe maclasse de la classe Form1 et de passer les membres de Form1 en protected pour que les classes derivees puissent y acceder. Dans ce cas, tu pourrai directement dans ta classe maclasse faire reference a ta textbox.

    bon courage

  10. #10
    Membre habitué Avatar de Couz02
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    232
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 232
    Points : 182
    Points
    182
    Par défaut
    Oui ma classe maclasse contrôle ma classe Form1 mais ma classe Form1 utilise des fonction à l'autre classe.

  11. #11
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 95
    Points : 110
    Points
    110
    Par défaut
    mais ma classe Form1 utilise des fonction à l'autre classe.
    Je ne comprends pas très bien le sens de ta phrase ?
    Si ta classe maclasse sert a "controler" ton interface Form1, fais-là plutot dériver de Form1 ce sera beaucoup beaucoup plus simple !

  12. #12
    Membre habitué Avatar de Couz02
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    232
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 232
    Points : 182
    Points
    182
    Par défaut
    En faite, chaque classe "contrôle" l'autre classe
    "Form1" controle "maclasse"
    "maclasse" controle "Form1"

  13. #13
    Membre expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Points : 3 065
    Points
    3 065
    Par défaut
    conception pas terrible :s

  14. #14
    Membre habitué Avatar de Couz02
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    232
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 232
    Points : 182
    Points
    182
    Par défaut
    quelle conception utiliser alors ?

  15. #15
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 95
    Points : 110
    Points
    110
    Par défaut
    "Form1" controle "maclasse"
    "maclasse" controle "Form1"
    Bonjour,

    Ca te semble pas un peu bizarre comme organisation ?
    Tu dois definir une classe "de base" qui contiendra les elements et fonctionnalites "de base" (pour faire simple) de ton interface : Form1 dans l'esprit me semble approprie. Puis tu derives From1 en maclasse dans laquelle tu implements des foncitonnalites etendues.
    En general si tu te sers d'editeurs graphiques d'interface, type (celui de ton compilateur, Qt Designer ou que sais-je encore) :
    1. Tu dessines ta jolie fenetre dans ton editeur d'interface : le compilateur te cree la classe correspondante.
    2. Tu ne modifies PAS cette classe a la main (= au niveau du code). Pourquoi ? Outre des raisons conceptuelle, prenons plutot une cause "pratique" : parce que quand tu vas aller dans ton editeur d'interface pour bouger ta textbox d'un pixel vers le bas ton compilateur va REGENERER ta classe correspondant a l'interface en ecrasant tout ce que tu as pu modifier a la main ! Ca peut etre des heures de boulot perdues ! Comment faire donc pour etendre les fonctionnalites de ton interface en etant a l'abri de ce genre d'incidents : tu fais dervier une classe de la class creee par ton compilateur, et tout va bien !

    Si toutefois Form1 et maclasse doivent effectivement se "controler l'une l'autre" (mais je doute fort que tu ne puisse pas t'en sortir avec l'heritage), il faudrait dans ce cas la creer une troisieme classe qui gere les interactions entre tes 2 classes.

  16. #16
    Membre habitué Avatar de Couz02
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    232
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 232
    Points : 182
    Points
    182
    Par défaut
    En fait j'ai déclaré mon controle dans ma classe "maclasse" et jy accède depuis ma classe "Form1.h" mais maintenant le problème c'est que cette variable est utilisée dans un thread donc petit soucis

Discussions similaires

  1. Réponses: 3
    Dernier message: 21/12/2011, 11h29
  2. Réponses: 13
    Dernier message: 28/06/2010, 14h35
  3. modifier un élément d'une form dans une méthode d'une autre form
    Par baldebaran dans le forum Windows Forms
    Réponses: 9
    Dernier message: 14/08/2009, 13h59
  4. Réponses: 4
    Dernier message: 31/10/2007, 20h27
  5. Réponses: 2
    Dernier message: 08/06/2007, 11h21

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