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#] Question de debutant: methode "parent&quo


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 6
    Par défaut [C#] Question de debutant: methode "parent&quo
    Bonjour,
    Voici mon probleme: la form de mon application est definie comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    namespace MonAppli2006
    {
        public partial class MaMainForm : Form 
        {
               ...
                ....ici le code habituel ...
                public void UpdateLog(object obj)
               {
                    CB_Info.Items.Add(DateTime.Now.ToUniversalTime()+": "+obj);
                    CB_Info.SelectedIndex = CB_Info.Items.Count - 1;
                }
        }
    }
    La methode UpdateLog me permet d'afficher des messages d'information dans un combobox.....jusque là, tout va bien
    Par contre, dans une autre methode de la classe MaMainForm, je créé un objet d'un classe "normale":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
      public class CDataFichier: MaMainForm
        {
          ...du code...
        public int Traitement()
        { 
         UpdateLog("Entering MyTraitement");
         }
    }  
       }
    Et là, même si le compilateur ne bronche pas, la methode UpdateLog est bien appelée, mais ne fait rien , c'est à dire que mon controle n'affiche pas mon nouveau texte...
    Qui aurait une idée ???
    Merci beaucoup !

  2. #2
    Expert confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par défaut Re: Question de debutant: methode "parent" ?
    Essayes :
    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
     
    namespace MonAppli2006 
    { 
      public partial class MaMainForm : Form 
      { 
        //... 
        public virtual void UpdateLog(object obj) 
        { 
           this.CB_Info.Items.Add(DateTime.Now.ToUniversalTime()+": "+obj); 
           this.CB_Info.SelectedIndex = CB_Info.Items.Count - 1; 
        } 
      } 
     
       //...
     
        public class CDataFichier: MainForm
        {
           public CDataFichier : base()
           {}
           public int Traitement()
           { base.UpdateLog("Entering MyTraitement");}
     
           //...
        }
    }
    Ta Form CDataFichier possède bien un CB_Info :

  3. #3
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 6
    Par défaut
    Merci pour l'aide...mais cela ne fonctionne pas.
    En effet, CDataFichier n'est pas une form (je l'ai dérivé de la classe MaMainForm pour pouvoir appeler UpdateLog uniquement)

  4. #4
    Expert confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par défaut
    Citation Envoyé par bflash2k
    Merci pour l'aide...mais cela ne fonctionne pas.
    En effet, CDataFichier n'est pas une form (je l'ai dérivé de la classe MaMainForm pour pouvoir appeler UpdateLog uniquement)
    Euh si MaMainForm est une Form et CDataFichier dérive de MaMainForm tu en conclues quoi :
    UpdateLog est une méthode dédié à un contrôle non ? alors quel interêt à ce que tu es en train de faire tout ceci n'est pas très explicite : : :

  5. #5
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 6
    Par défaut
    Aie pas taper
    Je resume: je veux pouvoir utiliser un controle(qui se trouve dans LaClasseA) a partir d'une instance d'une classe B . Cette instance B a été créée dans une methode de LaClasseA apres, par exemple, un appui bouton.

    Je cherche à faire dans la classe B un "truc" du genre:
    parent.MethodeDeLaClasseA(string s) et cette MethodeDeLaClasseA(string s) est censée afficher la string s dans une combobox (ou n'importe quel autre controle)

    Je voudrais eviter de passer un pointeur sur l'instance de la classe A vers la classe B

    Je suis plus clair, là ?
    Merci encore!

  6. #6
    Expert confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par défaut
    Donc au moment de l'instanciation de ClasseB (méthode button1_click de ClasseA) tu ajoutes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ClasseB b = new ClassB();
    b.Parent = this;
    //...
    Et surtout n'oublies pas dans la ClasseA d'implementer un accesseur sur le contrôle concerné
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public ComboBox CBInfo
    {
       get{ return this.CB_Info;}
    }
    Ainsi depuis la ClasseB tu peux maintenant où tu le souhaites récupéré par transtypage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ComboBox cb = ((ClasseA) this.Parent).CBInfo;

  7. #7
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 6
    Par défaut
    Ca ne marche pas . La classe B etant dérivée de A
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public class A: B {...}
    et A etant une Form, j'ai un message d'erreur à l'execution "Top-level control cannot be added to a control."
    Par contre, si je ne derive pas la classe B de la classe A, "Parent" n'existe pas.
    on continue ?
    edit : du code, c'est plus clair:
    Form1.cs
    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
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
     
    namespace SampleParent
    {
        public partial class ClassA: Form
        {
            public ClassA()
            {
                InitializeComponent();
            }
     
            private void button1_Click(object sender, EventArgs e)
            {
                ClassB b = new ClassB();
                b.MainFormClick();
            }
     
            public void MainUpdateBox(object obj)
            {
                textBox1.Text = (string) obj;
            }
        }
    }
    Et la classeB (ClassB.cs)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    using System;
    using System.Collections.Generic;
    using System.Text;
     
    namespace SampleParent
    {
        class ClassB : MainForm
        {
            public void MainFormClick()
            {
                MainUpdateBox("Je viens de la Classe B");
            }
        }
    }
    Au niveau interface graphique: un bouton pour cliquer et une edit box pour afficher le texte en provenance de la classe B

  8. #8
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Citation Envoyé par bflash2k
    ... Je voudrais eviter de passer un pointeur sur l'instance de la classe A vers la classe B ...
    C'est exactement ce que fait la propriété Parent. Donc pourquoi ne pas mettre de côté l'héritage et créer une propriété pour sotcker et récupérer la référence à ta classe, comme le ferait la propriété Parent.

  9. #9
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 6
    Par défaut
    Bon, j'ai suivi la methode de StormimOn. Effectivement ca fonctionne, meme si cela ne me satisfait pas entierement
    Merci encore pour votre aide !

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/10/2006, 15h07
  2. 2 questions de debutant
    Par New_programm_er dans le forum Ordinateurs
    Réponses: 6
    Dernier message: 29/12/2005, 08h32
  3. Vue parametrée (suite) - Question de debutant
    Par zorglob dans le forum Oracle
    Réponses: 1
    Dernier message: 28/12/2005, 11h28
  4. [VBA-E] Question sur la méthode "SaveAs"
    Par Flateric dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 25/04/2005, 14h18

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