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 :

[c#]Passer un paramètre d'une classe a l'autre


Sujet :

Windows Forms

  1. #1
    Membre confirmé Avatar de skysee
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 191
    Par défaut [c#]Passer un paramètre d'une classe a l'autre
    Bonjour a tous,
    j'ai un projet sous visual studio 2005.
    Pour le moment je dispose de deux classes :
    -public partial class Form1 : Form
    -class TcpClient

    Dans ma Form j'ai un composant richTextBox dans le quel j'affiche les informations de ma connexions.

    Dans ma classe TcpClient se trouvent 4 méthodes qui sont :
    -public string connexionClient()
    -public string fermetureConnexion()
    -public void EnvoiDesDonnees(string message)
    -public void ReceptionDesDonnées()

    Mon client Tcp fonctionne de cette manière :
    1-connexionClient()
    1.1 création du socket
    1.2 Création el lancement du thread ReceptionDesDonnées()
    2-EnvoiDesDonnees() (autant qu'il peut en etre nécessaire)
    3-string fermetureConnexion()

    A l'heure actuelle les méthode connexionClient() et fermetureConnexion() sont lancées depuis la form par l'intermédiaire de deux boutons. Je peux ainsi récupérer des infos (puisqu'elles retournent ces infos).

    Le problème est que ReceptionDesDonnées() est lancé a travers un thread, donc la seul chose a faire (enfin je pense) est de mettre a jour une variable globale qui contient la trames recue.
    Dans ma Form je peux acceder a cette variable mais de fasson ponctuel....Comment vérifier la variable est mise a jour et donc d'afficher la nouvelle trame qu'elle contient?

    J'espère etre clair...

    Merci beaucoup

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 481
    Par défaut
    Bonjour,
    Et avec un accesseur public ca ne fonctionne pas ??

    Bon dev
    Notalp

  3. #3
    Membre confirmé Avatar de skysee
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 191
    Par défaut
    Citation Envoyé par notalp
    Bonjour,
    Et avec un accesseur public ca ne fonctionne pas ??

    Bon dev
    Notalp
    Comment ca?

    En fait le plus simple pour moi serait d'accéder a la richTextBox depuis TcpClient et le mettre a jour directement(en instanciant la form....). Est ce possible?

    Parce que le problème est que public void ReceptionDesDonnées() est lancé a travers un threa et donc toujours actif du début a la fin de la connexion. Donc oui j'ai essayé avec un viriable public globale de la classe TcpClient, mais le problème est que cette variable est mise a jour tres souvent. Alors que depuis la form je ne peux qu'un appel ponctuel de cette variable.
    Ou alors une solution serait de lancer un thread d'écoute mais ca me parait compliqué pour fait ca.

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 481
    Par défaut
    Bonsoir,
    En fait le plus simple pour moi serait d'accéder a la richTextBox depuis TcpClient et le mettre a jour directement(en instanciant la form....). Est ce possible?
    Je pense qu'en réalité, tu as besoin d'accédé juste a son contenu.
    Si celui si est un text pure (string par exemple) oui c'est assez aisé de le faire.

    tu as des méthodes accéssibles depuis les autres classes qui te permettent de récupérer et de fournir ce genre de donner : les accesseurs.

    je pense que ce lien pourra t'aider : http://support.microsoft.com/kb/308229/fr

    bonne chance
    Notalp

  5. #5
    Membre confirmé Avatar de skysee
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 191
    Par défaut
    je me suis donc penché sur les accesseurs, en fait c'est une manière propre d'utilliser une variable grobale public. Donc ca me change pas mon problème.

    Ma form n'est toujours qu'une fenetre, certe avec des évenement ponctuels (bouton....), mais qu'une fenetre qu'on ne met a jour qu'en cliquant sur un bouton....
    Ma TcpClient est toujours une classe qui lance un thread d'écoute (reception) et qui met a jour une variable globale contenant la trame recue.

    Donc si je veux que ma Form fasse une mise a jour de sa richTextBox, quand la variable globale de tcpclient est modifiée, il faut bien que je lance un thread dans ma form qui tournera en meme temps que mon thread de reception.

    J'ai pas le choix, sinon je vois pas du tout.

    Merci

  6. #6
    Membre très actif
    Inscrit en
    Janvier 2004
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 208
    Par défaut
    pense a crée un deleguate, de plus ta gestion de thread sera ameliore lors du passage de l'un a l'autre.

  7. #7
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Par défaut
    Salut .

    ton problème se régle typiquement en utilisant un evenement.

    Je te conseil la lecture de ces articles :

    A la découverte des évènements

    et

    Qu'est ce qu'un délégué et comment s'en servir ?

  8. #8
    Membre confirmé Avatar de skysee
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 191
    Par défaut
    Citation Envoyé par dev01
    Salut .

    ton problème se régle typiquement en utilisant un evenement.

    Je te conseil la lecture de ces articles :

    A la découverte des évènements

    et

    Qu'est ce qu'un délégué et comment s'en servir ?
    Et bien oui c'est la réponse a ma question, c'est vraiment puissant. Merci beaucoup.
    bye

  9. #9
    Membre confirmé Avatar de skysee
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 191
    Par défaut
    C'est ce qu'il me faut, mais a trop m'enfouir dans le sujet j'arrive pas a mettre en place un délégué.

    Classe A (form)
    private String MessageRichtBox;


    Classe B (user class)
    private String TrameAutoUpdate;

    Au finale je veux donc créer un évenement, c'est évènement ne sera pas l'appui sur un bouton, mais simplement la mise a jour de la variable TramAutoUpdate.

    Des que cette variable est mise a jour l'évènement doit démarrer une méthode de ma classe A.

    Et je n'arrive pas a implémenter la chose...

    Voila désolé d'avoir la tete si dure !!!!

    merci

  10. #10
    Membre chevronné

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 481
    Par défaut
    Bonsoir, un post sur le meme sujet :

    http://www.developpez.net/forums/sho...d.php?t=213199

    En esperant t'aider

    Notalp

  11. #11
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Par défaut
    Salut .

    il faut que dans la classe qui va déclencher l'évènement tu le déclares

    Code C# : 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
     
     
    //Création du handler de l'evènement
    public deleguate void ReceptionHandler(byte[] data);
     
    public class A
    {
     
       //Création de l'évènement de réception des données
       public event ReceptionHandler ReceptionDonnees;
     
       private void MaFonctionDeReceptionDeDonnees()
       {
              byte[] data;
              //Code de réception des données
     
             //On test si l'évènement est null ou non pour savoir si quelqu'un c'est         //abonné à l'évènement ou non. On evite ainsi un exception NullReferenceException
             if( ReceptionDonnees != null )
                 ReceptionDonnees(data);
       }
    }

    Ensuite dans la classe qui doit lire les données reçu tu fait simplement :

    Code C# : 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
     
    public class B
    {
       private A a;
     
       public B()
       {
          a = new A();       
          a += new ReceptionDonnees(this.RecepDonnees);
       }
     
       private void RecepDonnees(byte[] data)
       {
          //Traitement des données
       }
    }

    Voila. Ce qu'il faut bien comprendre c'est comme fonctionne les évènements et leur relation avec les délégués

  12. #12
    Membre confirmé Avatar de skysee
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 191
    Par défaut
    Merci beaucoup, ca m'a aider a comprendre et ca fonctionne, cependant j'ai du modifier de cette manière :

    Code C# : 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
    public class B
    {
       private A a;
    
       public B()
       {
          a = new A();       
          a.ReceptionDonnees += new ReceptionHandler(this.RecepDonnees);
       }
    
       private void RecepDonnees(byte[] data)
       {
          //Traitement des données
       }
    }

    Voila encore merci, c'est vraiment puissant cette gestion des évènement et quand on prend un peu de recul, assez simple et compréhensive en fait.
    bye

  13. #13
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Par défaut
    Citation Envoyé par skysee
    Merci beaucoup, ca m'a aider a comprendre et ca fonctionne, cependant j'ai du modifier de cette manière :
    effectivement je suis allé trop en écrivant mon code

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. passage de paramètres d'une class a l'autre
    Par thierry007 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 15/05/2009, 19h54
  2. Passer un paramètre dans une classe
    Par soso78 dans le forum VB.NET
    Réponses: 1
    Dernier message: 27/05/2008, 08h03
  3. Réponses: 8
    Dernier message: 30/05/2006, 01h26
  4. Passage de paramètre d'une classe à une autre
    Par semenzato dans le forum C++
    Réponses: 3
    Dernier message: 21/09/2005, 13h59
  5. Passer en paramètre d'une fonction (...)
    Par Captain_JS dans le forum C++
    Réponses: 5
    Dernier message: 03/11/2004, 07h18

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