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#] Passage de valeur entre classes


Sujet :

Windows Forms

  1. #1
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut [C#] Passage de valeur entre classes
    Bonjour,

    Programmeur C et C++ j'ai décidé d'essayer le C# mais certaines choses m'échappent encore.

    J'ai une application travaillant sur des nombres dans différentes bases. Un membre donnée de la classe Form1 nommé m_base contient la base actuellement utilisée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        public partial class Form1 : Form
        {
            public uint m_base; //base utilisée
    [...cut...]
    Sur ma form principale, j'ai une editbox que j'ai subclassée, de façon à ce que suivant la base actuellement utilisée, l'utilisateur n'entre pas n'importe quoi. Par exemple, si nous sommes en base 2, l'utilisateur ne pourra enter que 0 ou 1 (de 0 à 9 en base 10, etc.).

    Ma classe de subclassing de l'editbox se nomme SubClassTextBox :

    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
     
        public class SubClassTextBox : TextBox
        {
            private const int  WM_CHAR = 0x102;
            protected override void WndProc(ref Message m)
            {
                switch (m.Msg)
                {
                    case WM_CHAR:
                        // ? comment obtenir m_base de form1 ?                   
                        if (form1.m_base == 2)//base binaire
                        {
                            if (m.WParam.ToInt32() >= 0x30 && m.WParam.ToInt32() <= 0x31)
                                base.WndProc(ref m);                      
                            else
                                break;
                        }
    [...CUT...]
    Dans cette classe, je dois connaitre la valeur de m_base afin de faire le traitement désiré.

    Mais comment obtenir la valeur de form1.m_base dans ma classe SubClassTextBox ?

    Je ne pense pas pouvoir passer de valeur à WndProc (dans ce cas là , je passais une ref de Form1)...

    En C++, j'aurais fait une fonction friend mais en C# cela ne semble pas exister...

    Y'a t'il une solution ?

    En vous remerciant, et je suis désolé si la question est triviale mais je débute en C#.

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Lorsque tu déclares ton SubClassTextBox, passe ta valeur dans le constructeur

  3. #3
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    Merci Morpheus pour ta réponse.

    Toutefois ma SubClassTextBox est déclarée dans InitializeComponent() et à ce moment là, la valeur de m_base est encore indéfinie.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            private void InitializeComponent()
            {
                System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
                //this.textBox1 = new System.Windows.Forms.TextBox();//ancienne proc par défaut
                this.textBox1 = new SubClassTextBox();
    L'utilisateur peut aussi, à tout moment lors du fonctionnement de l'application, changer de base numérale...

    Il me faudrait donc un moyen de passer la valeur de m_base à SubClassTextBox à n'importe quel moment et pas seulement lors de l'initialisation.

    Merci encore

  4. #4
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Alors tu passes par une propriété

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    private void InitializeComponent()
            {
                System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
                //this.textBox1 = new System.Windows.Forms.TextBox();//ancienne proc par défaut
                this.textBox1 = new SubClassTextBox();
    Et après l'appel de InitializeCompent, ou quand tu veux, tu fais un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    this.textBox1.Base = 2;

    Et ta classe devient alors:

    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
    public class SubClassTextBox : TextBox
        {
            private int m_base;
    
            public int Base
            {
                   get
                   {
                        return m_base;
                   }
                   set
                   {
                        m_base = value;
                   }
            }
            private const int  WM_CHAR = 0x102;
            protected override void WndProc(ref Message m)
            {
                switch (m.Msg)
                {
                    case WM_CHAR:
                        // ? comment obtenir m_base de form1 ?                   
                        if (this.m_base == 2)//base binaire
                        {
                            if (m.WParam.ToInt32() >= 0x30 && m.WParam.ToInt32() <= 0x31)
                                base.WndProc(ref m);                      
                            else
                                break;
                        }
    A+

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    238
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 238
    Points : 269
    Points
    269
    Par défaut
    C'est l'utilisation des Propriétés. C'est un concept nouveau qui n'existait pas en C++.

    public int Base
    {
    get
    {
    return m_base;
    }
    set
    {
    m_base = value;
    }
    }


    Ca regroupe les accésseurs à un des attribut de ta classe.
    « L’erreur est humaine, mais un vrai désastre nécessite un ordinateur »

  6. #6
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    Bonjour,

    Merci beaucoup pour vos réponses, c'est exactement cela !

    Tout fonctionne comme sur des roulettes, et je viens de découvrir une nouvelle facette du langage !

    De plus, la solution est beaucoup plus simple que je ne l'avais imaginé





    Merci encore

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

Discussions similaires

  1. passage de valeurs entre deux classes java
    Par prugne dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 17/09/2008, 10h56
  2. [résolut] Problème de passage de valeur entre Windows Form
    Par tribaleur dans le forum Windows Forms
    Réponses: 4
    Dernier message: 12/06/2007, 11h29
  3. Problème passage de valeurs entre un Form et procédure
    Par Aizen64 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 11/06/2007, 09h41
  4. Réponses: 3
    Dernier message: 21/05/2007, 20h09
  5. Passage de valeurs entre fenêtres différentes
    Par Amnesiak dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 16/02/2005, 15h10

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