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

Windows Forms Discussion :

modifier le textbox a partir d'une autre classe.


Sujet :

Windows Forms

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2012
    Messages : 10
    Points : 6
    Points
    6
    Par défaut modifier le textbox a partir d'une autre classe.
    bonjour
    je travail sur un projet de type Windows Universal sous C#, ma classe principale créer par defaut est nommée MainPage dans le namespace EnergyMeter, voici comment elle ressemble :

    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
    20
    21
    namespace EnergyMeter
    {
     
        public sealed partial class MainPage : Page
        {
            // code ici
     
            // Declaration des propriétés
               private int a;
     
            // Declaration des méthodes
     
            // Evenement
            private void button_Click(object sender, RoutedEventArgs e)
            {
    	// executer un code 
    	// je fait appel a la fonction
            }
        }
     
    }
    du cote de l'interface j'ai créer un bouton et un textbox

    Nom : Untitled.png
Affichages : 1174
Taille : 3,0 Ko

    j'ai ajouté une nouvelle classe au projet nome ADE7878 dans un nouvelle feuille. cette classe represente le nom de la puce ADE7878 avec laquelle je suis entrain de travailler. je dois sauvegarder dedans les noms des registres, leur adresses et d'autres methodes utiles ......

    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
    20
    namespace EnergyMeter
    {
        public class ADE7878
        {
     
           /*The ADE7878 I2c address*/
            public const byte I2C_ADDR = 0x38;
     
    	.......
     
    	/*methode de la classe ADE7878*/
            public void SetTextbox()
            {
    	// code ici
     
            }
    	.......
     
        }
    }
    je veux par exemple dans la methode public void SetTextbox() de la classe ADE7878 modifier le textbox qui appartient a la calsse principale MainPage mais j'arrive pas a le faire.

    de meme pour modifier par exemple la variable 'a' de la classe MainPage.
    dans le cas ideal je procede de cette maniere :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            public void SetTextbox()
            {
     
    	MainPage.textBox.Text = "Bonjour"; // synthaxe incorrecte
     
            }
    mais bon ca marchera pas car le compilateur me retourne une erreure car la synthaxe est incorrecte.
    j'ai cherché un peux sur le net et j'ai trouvé cette solution mais sans issue
    j'ai ajouté une propriete Name dans la classe MainPage comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public string Name
                {
                    get {return this.textBox.Text;}
                    set {this.textBox.Text = value;}
                }
    et du coté de la classe ADE7878 j'ai procedé de cette maniere :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public void SetTextbox()
            {
     
    	MainPage .Name = "Bonjour"; //  erreur de synthaxe
     
            }
    si j'etais sous visual basic normalement ca marche.
    je ne peux pas le faire de cette maniere car la proprieté Name n'est pas de type static ou const pour l'acceder a partir de la classe directement, donc je dois declarer une instance g1 de la classe Mainpage ensuite je fais appel a la proprieté Name comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    MainPage g1 = new MainPage();
     
    public void SetTextbox()
            {
     
    	g1.Name = "Bonjour"; // 
     
            }
    le textbox n'a pas ete modifié et ca me parait logique car j'ai fait appel a la propriete Name a partir de l'instance creer g1. ca me parait logique si j'ai fais appel a Name a partir de la classe elle meme sans utiliser l'instance MainPage .Name = "Bonjour"

    Que dois-je faire

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2012
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    juste pour info , je fais appel a SetTextbox() lorsque j'appui sur le boutton de l'interface.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ADE7878 AD = new ADE7878 ();
            private void button_Click(object sender, RoutedEventArgs e)
            {
             AD.SetTextbox() ;
            }

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2010
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 479
    Points : 762
    Points
    762
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public void SetTextbox()
    { 
    	MainPage.textBox.Text = "Bonjour"; // syntaxe incorrecte 
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public void SetTextbox()
    { 
    	this.textBox.Text = "Bonjour"; // syntaxe incorrecte 
    }

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2012
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par lead8209 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public void SetTextbox()
    { 
    	MainPage.textBox.Text = "Bonjour"; // syntaxe incorrecte 
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public void SetTextbox()
    { 
    	this.textBox.Text = "Bonjour"; // syntaxe incorrecte 
    }
    la syntaxe est incorrecte car la methode SetTextbox() se trouve dans la classe ADE7878 et donc si je met "this" ca pointe sur la classe ADE7878 et non pas sur Mainpage.

    Ce qui me parait bizzare est le suivant:
    apres avoir ajouté la proprieté "Name" avec "get" et "set" dans la classe Mainpage afin de modifier la valeur de du textbox de l'interface. du cote de la classe ADE7878 pour accedder a LA CLASSE Mainpage je dois créer une instance "MainPage g1 = new MainPage();" ensuite modifier le textbox "g1.Name = "Bonjour";"

    modifier a partir de l'instance c'est pas la meme chose que de modifier la classe mainpage elle meme. l'interface grpahique est liée a la classe Mainpage non pas a l'instance créer "g1". j'espere etre claire

  5. #5
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2010
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 479
    Points : 762
    Points
    762
    Par défaut
    Pardon je n'avais pas bien lu...
    Tu peux faire de plusieurs manière mais ça ne semble pas propre.

    Pour que ta classe ADE7878 connaisse la textbox il faut que tu lui passes l'instance de ta classe ou bien de ta texbox.
    En général on ne fait pas ça. Ça fait du code qui est très imbriqué où les classes sont fortement liées entre elles.
    Au lieu de faire :

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    namespace EnergyMeter
    {
     
        public sealed partial class MainPage : Page
        {
            // code ici
     
            // Declaration des propriétés
              ADE7878 AD = new ADE7878 ();
               private int a;
     
            // Declaration des méthodes
     
     
            private void button_Click(object sender, RoutedEventArgs e)
            {
              AD.SetTextbox(this.textBox) ;
            }
        } 
        public class ADE7878
        {
     
           /*The ADE7878 I2c address*/
            public const byte I2C_ADDR = 0x38;
     
    	.......
     
    	/*methode de la classe ADE7878*/
            public void SetTextbox(Textbox tb)
            {
    	// code ici
               tb.Text = "le texte à mettre"; 
            }
     
        }
    }
    ou encore :

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    namespace EnergyMeter
    {
     
        public sealed partial class MainPage : Page
        {
            // code ici
     
            // Declaration des propriétés
              ADE7878 AD = new ADE7878 (this);//note bien que l'on passe this ici car il est demandé dans le constructeur (encore une fois ce n'est pas propre !!!)
               private int a;
     
            // Declaration des méthodes
     
     
            private void button_Click(object sender, RoutedEventArgs e)
            {
              AD.SetTextbox(this.textBox) ;
            }
        } 
        public class ADE7878
        {
     
     
           /*The ADE7878 I2c address*/
            public const byte I2C_ADDR = 0x38;
     
            MainMage m_Page = null;//référence vers ta MainPage connue dans toute ta classe
    	public ADE7878(MainPage pPage)
    {
    this.m_Page = pPage;
     
    ]
     
    	/*methode de la classe ADE7878*/
            public void SetTextbox()
            {
    	// code ici
               this.m_Page.Textbox.Text = "le texte à mettre"; 
            }
     
        }
    }
    On fait plutôt :

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    namespace EnergyMeter
    {
     
        public sealed partial class MainPage : Page
        {
            // code ici
     
            // Declaration des propriétés
              ADE7878 AD = new ADE7878 ();
               private int a;
     
            // Declaration des méthodes
     
     
            private void button_Click(object sender, RoutedEventArgs e)
            {
                   this.Textbox.Text = AD.GetText();
            }
        } 
        public class ADE7878
        {
     
           /*The ADE7878 I2c address*/
            public const byte I2C_ADDR = 0x38;
     
    	.......
     
    	/*methode de la classe ADE7878*/
            public string GetText()
            {
    	// code ici
               return "le texte à mettre"; 
            }
     
        }
    }
    Tu me passeras les erreurs de syntaxe car c'est tapé directement dans la page du forum pas de compilateur pour me dire si c'est bon ^^

    Tu vois ce que je veux dire avec ces exemples ? tu fonctionnes à l'envers. Les classes non-interface ne doivent pas connaitre d'autres classes d'interface. Elles doivent se suffire à elles-mêmes (compiler même si tu enlèves ta MainPage).

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2012
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    merci lead8209 pour votre reponse.

    dans le premier code ca se bloque dans la methode SetTextbox(Textbox tb) au seing de la classe ADE7878. le compilateur ne reconnait pas le type Textbox.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public void SetTextbox(Textbox tb)  // Textbox n'est pa reconnu par le compilateur
            {
    	// code ici
               tb.Text = "le texte à mettre"; 
            }

    dans le deuxieme code il ne recoonait pas aussi le textbox dans cette ligne de code: this.m_Page.Textbox.Text ,peut etre que le textbox est par defaut private et donc innaccesible.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    /*methode de la classe ADE7878*/
            public void SetTextbox()
            {
    	// code ici
               this.m_Page.Textbox.Text = "le texte à mettre"; 
            }
    le 3eme code fonctionne correctement. merci

  7. #7
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2010
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 479
    Points : 762
    Points
    762
    Par défaut
    Effectivement c'est
    avec un B majuscule comme dit j'ai codé directement dans la fenêtre du forum. Il faut la directive using qui va bien aussi.

    Bon courage.

Discussions similaires

  1. [V8] Modifier la valeur d'un attribut à partir d'une autre classe
    Par othman3535 dans le forum Odoo (ex-OpenERP)
    Réponses: 3
    Dernier message: 15/01/2015, 15h18
  2. Modifier un composant d'une classe à partir d'une autre classe
    Par Yann_69 dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 25/06/2012, 07h12
  3. modifier une variable d'une classe à partir d'une autre classe
    Par Rniamo dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 16/03/2008, 20h40
  4. [VB.NET]Comment modifier un textbox a partir d'une dll?
    Par Subkill dans le forum Général Dotnet
    Réponses: 5
    Dernier message: 21/01/2008, 21h38

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