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 :

[Débutant]Agir sur ma fenêtre via une autre classe o_O


Sujet :

Windows Forms

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut [Débutant]Agir sur ma fenêtre via une autre classe o_O
    Plop amis codeurs !

    Voilà mon souci, j'suis en train de faire une étude de faisabilité pour mon projet de fin d'année sur les sockets client/serveur en C# =D

    L'IHM de mon application Serveur contient une RichTextBox qui affiche des évenements sous forme de texte... jusque là rien de bien compliqué
    J'me suis crée une p'tite classe CServeur avec les déclarations des sockets, les méthodes nécessaires, etc...
    Le truc c'est que j'aimerais afficher directement des messages dans ma RichTextBox directement à partir des méthodes de ma classe CServeur !

    Ce que j'ai éssayé ! c'est ça :
    Bon j'ai tout simplement créer un attribut dans ma classe CServeur de type Form1 (Classe de ma fenêtre principale =]). Je pensais pouvoir directement agir sur mes contrôles via cet attribut mais... ce n'est pas le cas... =( Voici l'appel de la méthode dans CServeur :


    Form1 MaFenetre = new Form1();
    MaFenetre.MaRichTextBox.AppendText("Test\n");


    Si vous avez une idée n'hésitez pas ! je suis toute ouïe =]
    thanx ! =o)

  2. #2
    AP
    AP est déconnecté
    Membre confirmé
    Avatar de AP
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    480
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2002
    Messages : 480
    Points : 538
    Points
    538
    Par défaut
    il faut que tu crées une méthode publique dans ta form permettant d'ajouter ton texte à ta richtextbox.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Ben finalement :)
    Plop !

    Yep j'ai éssayé de rajouter une méthode dans Form1.cs mais rien à faire... =(

    Finalement j'en ai parlé à mon prof qui m'a tout de suite dit d'utiliser des bons vieux pointeurs =D
    Du coup j'ai rajouté un attribut de type Form1 dans ma classe Serveur qui est initialisé dans le constructeur de cette dernière avec le pointeur sur ma Form passé en paramètre.

    Du coup à l'appel dans la méthode OnClick de ma Form ça donne ça :


    CServeur MonServeur = new CServeur(this);


    Bon voilou voilou finalement c'était pas grand chose...
    merci quand même AP =)
    plouch !

  4. #4
    Membre habitué Avatar de lapanne
    Inscrit en
    Juin 2006
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 200
    Points : 197
    Points
    197
    Par défaut
    Tu peux passer par le contructeur mais aussi par un attribut de ta classe du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Cserveur cs = new CServeur()
    cs.myRicheTextBox = this.RichTextBox1;
    <SplyRock95> c'est quoi ton style?
    <Bat> #bat{height:180cm;weight:160lbs; eye-color:#0000FF; hair-color: #FFFF00;}
    Copyright @ bashfr.org

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 700
    Points : 780
    Points
    780
    Par défaut
    Tu manipules sans le savoir des pointeurs partout en C# : tu n'as fais qu'ajouter une référence de l'instance form1 à ta classe CServeur. Je pense qu'il te faut réviser encore un peu les notions objets

    Lapanne, si j'ai compris dans son cas :

    form1 => instancie CServeur
    form1 => instancie richTB1

    CServeur doit envoyer des messages à richTB1.



    Dans ton cas tu dois tout de même ajouter une Propriété publique à ta Form1 pour envoyer le texte. Car je suis sur que tu as placée ta RichTextBox en publique pour ajouter du texte. C'est pas propre

    Dans la class de ta form :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    public void AddMessage( string text )
    {
    this.richTextBox1.AppendText( text + Environnement.NewLine );
    }
    dans CServeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    private xxx <taméthode>()
    {
    this.<taform>.AddMessage( "blblablalbalbl" );
    }
    Imagines que tu décides d'ajouter tes messages dans une ListView plutot qu'un RTB, tu seras moins ennuyer de ne changer qu'une méthode


    Pour tout t'avouer c'est assez moche de passer la référence de la form1 à CServeur : pour etre "propre" tu devrais plutot créer ton propre évennement dans ta classe CServeur du genre "MessageSended", avec en argument ton message.
    Ta form1 intercepte l'évennement et envoit le message ou elle veut (dans rTB1 en l'occurence)

  6. #6
    Membre habitué Avatar de lapanne
    Inscrit en
    Juin 2006
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 200
    Points : 197
    Points
    197
    Par défaut
    +1 avec chubyone

    CServeur ne devrait pas avoir de référence à ta form mais aprés c'est plus de la conception que de l'erreur de code. Si tu débutes, te prends pas trop la tête avec ça

    Google + observer pattern devrait t'aider à trouver de bons éléments de réponses.
    <SplyRock95> c'est quoi ton style?
    <Bat> #bat{height:180cm;weight:160lbs; eye-color:#0000FF; hair-color: #FFFF00;}
    Copyright @ bashfr.org

  7. #7
    Membre averti Avatar de Gregory.M
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 684
    Points : 309
    Points
    309
    Par défaut
    Je pense qu'il faut que tu passes ta form en parametre.

    maclasse c =new maclasse();
    maclasse.afficher(form1);

    dans ta methode afficher:


    public void afficher (Form f)
    {
    f.tontext.text("...");
    }


    ceci devrait marcher

Discussions similaires

  1. Listener sur un bouton d'une autre classe
    Par toma03 dans le forum Débuter
    Réponses: 1
    Dernier message: 12/12/2008, 08h52
  2. creation de fonction et appel via une autre classe
    Par oceane751 dans le forum Langage
    Réponses: 3
    Dernier message: 21/01/2008, 23h26
  3. Réponses: 6
    Dernier message: 05/11/2007, 14h51
  4. Contrôle d'une fenêtre par une autre classe
    Par SuperWeight dans le forum Windows
    Réponses: 4
    Dernier message: 19/04/2007, 16h01
  5. Réponses: 2
    Dernier message: 22/12/2006, 11h35

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