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 :

Comment acceder au control d'une form depuis une autre form?


Sujet :

Windows Forms

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 68
    Points : 33
    Points
    33
    Par défaut Comment acceder au control d'une form depuis une autre form?
    bonjour
    je suis sur un projet windows form sous VS2005. J'ai deux form (form1 et form2)...form2 et au dessus de form1.
    je souhaite lorsque j'appui sur un bouton de form 2 mettre à jour certain control de form1.
    Je m'attendait a faire ceci dans le code de form2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Form1.TextBox1.Text = "Ca marche";
    Mais je n'accede pas a TextBox...

    Comment dois je faire cela?

    Merci d'avance.

  2. #2
    Membre à l'essai
    Inscrit en
    Janvier 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Janvier 2005
    Messages : 21
    Points : 15
    Points
    15
    Par défaut
    Par defaut ta textBox doit être en "Private" donc tu ne peux pas y acceder.
    Le plus simple est de rajouter une propriété public dans Form1 qui te permet de modifier la propriété "Text" de ta textbox.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Points : 909
    Points
    909
    Par défaut
    D'abord, il ne faut pas écrire "Form1.TextBox etc".
    Form1 est une classe qui s'instancie, et une TextBox est - normalement- une variable de classe. Il faut donner le nom de la variable qui représente ton instance de formulaire...
    ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Form1 monFormulaire = new Form1();
    ...
    monFormulaire.TextBox1.Text = "coucou";
    Puisque ta Form1 est visiblement définie avant ta Form2, il faut que tu te débrouilles pour, d'une manière ou d'une autre, "donner" ton instance de Form1 à ton instance de Form2, pour que celle-ci "sache" quelle instance de Form1 elle doit remplir (en argument d'un constructeur, d'une fonction, etc...)



    Ensuite, la TextBox est peut-être définie en private dans ta Form1. Si tu veux y accéder directement depuis une autre classe (ici Form2), définis une propriété ou une fonction adaptée, avec les droits d'accès appropriés.
    Là j'ai dit "peut-être" car la majuscule dans ton code me suggère l'existence d'une propriété... Mais je précise tout de suite, au cas où ce n'était pas déjà le cas

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 68
    Points : 33
    Points
    33
    Par défaut
    je peux pas définir ma textbox en public?

  5. #5
    Membre régulier Avatar de abir84
    Inscrit en
    Mars 2007
    Messages
    214
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2007
    Messages : 214
    Points : 116
    Points
    116
    Par défaut
    Salut

    Je ne sais pas si c la meilleure solution mais essaye ça :
    Dans ta première form avant de lancer la fenêtre form2 designe lui le form1 comme owner
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Form2 f2 = new Form2();
                f2.Owner = this;
                f2.Show();
    Puis dans f2 tu peux accéder aux contrôles de f1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
         Form1 f = (Form1)this.Owner;
         f.TextBox1.Text = "Ca marche";
    ça doit marcher avec eventuellement qques modifications, mais je ne crois pas que ce soit la solution optimale parce que déja lorsqu'on ferme la fenêtre qui est owner tous ses enfants sont fermés ce qui peut gêner dans certains cas.

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Points : 909
    Points
    909
    Par défaut
    Citation Envoyé par UnSofteuxAmateur
    je peux pas définir ma textbox en public?
    Si tu peux, mais les propriétés c'est plus joli

    EDIT :
    D'ailleurs il vaut mieux définir une propriété pour le texte de la TextBox (puisque c'est uniquement ça que tu veux changer...) que pour la TextBox elle-même. Comme ça, on ne pourra vraiment changer que le texte depuis l'extérieur.

  7. #7
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Si mais c'est sale. C'est comme si au lieu d'avoir une boite au lettres pour le courrier, tu laissais ta porte ouverte pour que le facteur te le dépose sur la table. (Prix du meilleur exemple tordu au festival de Bouzin-les-mines 2004)

    Non pour être plus technique, il vaut mieux garder les détails internes d'un formulaire masqués. Il est toujours assez dangereux d'exposer les rouages d'une applications sans protection, imagine que le développeur s'amuse à redimensionner le textbox depuis l'extérieur de ta fenêtre.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 68
    Points : 33
    Points
    33
    Par défaut
    la methode de Abir84 ca m'interesse mais ca marche pas je vois toujours pas les control de la form1 dans le code de la form 2 (est propre comme methode?)

  9. #9
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Citation Envoyé par UnSofteuxAmateur
    la methode de Abir84 ca m'interesse mais ca marche pas je vois toujours pas les control de la form1 dans le code de la form 2 (est propre comme methode?)
    ça oblige aussi à mettre les controles en public.

    Tu peux aussi créer une méthode public SetText dans Form1, et l'appeler depuis Form2.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Form1 f = (Form1)this.Owner;
         f.SetText("Ca marche");
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Points : 909
    Points
    909
    Par défaut
    Citation Envoyé par UnSofteuxAmateur
    ca marche pas
    C'est-à-dire ?
    ça compile ? des erreurs ? ou alors tu n'en es qu'à essayer de taper ton code, IntelliSense ne te propose pas les contrôles de ta Form1, mais tu n'as rien essayé de compiler en fait ?

    (Eventuellement : tu peux nous montrer la structure de ton code ?)

  11. #11
    Expert confirmé
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Points : 4 388
    Points
    4 388
    Par défaut
    question deja traitée dans ce thread :
    http://www.developpez.net/forums/sho...teraction+form
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  12. #12
    Membre régulier Avatar de abir84
    Inscrit en
    Mars 2007
    Messages
    214
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2007
    Messages : 214
    Points : 116
    Points
    116
    Par défaut
    Citation Envoyé par UnSofteuxAmateur
    la methode de Abir84 ca m'interesse mais ca marche pas je vois toujours pas les control de la form1 dans le code de la form 2 (est propre comme methode?)
    Meme ici ton textBox doit être déclaré public sinon essaye de faire une méthode qui modifie ce textbox (comme les setters et getters)
    dans form1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public void setTextBox1 (String text){
          this.textBox1.Text = text;
    }

    et dans form2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    f.setTextBox1("ça marche...");

Discussions similaires

  1. Réponses: 3
    Dernier message: 09/10/2015, 17h16
  2. Acceder a une listbox depuis d'autre form avec une class
    Par NazOok dans le forum Windows Forms
    Réponses: 2
    Dernier message: 03/05/2011, 11h16
  3. comment avoir une valeur d'une form1 dans un autre form
    Par sabrina_beautyful dans le forum Windows Forms
    Réponses: 3
    Dernier message: 18/05/2009, 14h53
  4. Réponses: 2
    Dernier message: 26/11/2007, 12h22
  5. Réponses: 3
    Dernier message: 05/06/2006, 21h14

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