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

C# Discussion :

accès/portée de méthodes inter-classes


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 535
    Par défaut accès/portée de méthodes inter-classes
    salut à tous

    comme souvent, je vais faire appel à vos lumières sur un truc, à mon avis basique pour les spécialistes que vous êtes, mais qui me coûte des cheveux depuis un moment!
    je viens d'arriver sur un projet que je découvre (C# aussi), mais que j'essaye déjà d'améliorer...


    en gros:
    -> commands.xaml.cs: gestion d'un textblock (InfoSysZone) et de la méthode d'affichage d'informations (InfoSysy()), en append de l'existant: fonctionne parfaitement
    -> selection.xaml.cs: appel de la méthode pour affichage d'un message

    problème:
    en l'état mettre l'appel à InfoSys() est impossible dans selection.xaml.cs

    -> InfoSys("Message 1", 2); error CS0103: Le nom 'InfoSys' n'existe pas dans le contexte actuel
    (logique)

    -> commands.InfoSys("Message 1", 2); error CS0120: Une référence d'objet est requise pour la propriété, la méthode ou le champ non statique 'Commands.InfoSys(string, int)'
    (logique, InfoSys() n'étant pas static)

    mais en passant InfoSys() en static dans commands.xaml.cs
    -> public static void InfoSys(string msg, int cr) error CS0120: Une référence d'objet est requise pour la propriété, la méthode ou le champ non statique 'Commands.InfoSysZone'


    donc, comment faire pour utiliser InfoSys() en dehors de commands.xaml.cs?

    toute aide sera appréciée...
    merci

    commands.xaml.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
    28
    using System.Windows.Controls;
     
    namespace ProjectGUI.View
    {
        /// <summary>
        /// Logique d'interaction pour Commands.xaml
        /// </summary>
        public partial class Commands : UserControl
        {
            public Commands()
            {
                InitializeComponent();
                InfoSys("Message 1", 2);
                InfoSys("Message 2", 1);
                InfoSys("Message 3", 1);
            }
     
            //public static void InfoSys(string msg, int cr)
            public void InfoSys(string msg, int cr)
            {
                InfoSysZone.Text += msg;
                for (int i=0; i<cr; i++)
                {
                    InfoSysZone.Text += "\r\n";
                }
            }
        }
    }
    selection.xaml.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
    28
    29
    30
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    
    namespace ProjectGUI.View
    {
        /// <summary>
        /// Logique d'interaction pour Selection.xaml
        /// </summary>
        public partial class Selection : UserControl
        {
            public Selection()
            {
                InitializeComponent();
                => appeler InfoSys(); ici
            }
           
        }
    }

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 440
    Par défaut
    Bonjour,
    Comme indiqué dans le deuxième message, pou appeler une méthode non statique tu dois passer par une instance de classe.
    Donc dans ton code tu dois avoir un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var command = new Commands()
    avant l'appel de la méthode (command.InfoSys() ).

    Tatayo.

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 535
    Par défaut
    Alors, ok, je corrige donc:

    selection.xaml.cs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public partial class Selection : UserControl
        {
            public Selection()
            {
                
                InitializeComponent();
    
                var command = new Commands();
                command.InfoSys("Message 4", 1);
            }
        }
    Et, ça passe effectivement à la compil', merci!

    MAIS, autre phénomène maintenant: l'actualisation à l'écran ne se fait pas(?)

    -> j'ai toujours affiché
    Message 1

    Message 2
    Message 3

    -> le textblock ne s'actualise donc pas, avec Message 4

    -> alors qu'en debbug j'ai bien la suite des 4 messages
    command.InfoSys.text =
    Message 1\r\n\r\nMessage 2\r\nMessage 3\r\nMessage 4\r\n\r\n



    mais je creuse la question... ça doit être un truc tout con!

  4. #4
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 535
    Par défaut
    Bon, j'avoue de ne pas voir le problème, étant donné:
    * que le textblock est bien en binding avec la variable contenant tous les messages,
    * et que l'actualisation se fait très bien pour les message crées en interne, dans commands.xaml.cs

    Alors pourquoi ce n'est pas le cas quand le message est crée depuis une autre classe (selection.xaml.cs, pour mon test)?


  5. #5
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 440
    Par défaut
    Avec juste des bouts de code, difficile de dire ce qui ne va pas.
    Le mieux pour moi est de poser des points d'arrêt dans le code, par exemple sur les appels de InfoSys(), puis de voir ce qu'il se passe.
    Tu auras peut-être un début de piste.

    Tatayo.

  6. #6
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 535
    Par défaut
    Ce que j'ai fait oui, c'est comme ça que j'ai vu que visiblement les appels à InfoSys() fonctionnent, puisque je retrouve bien la concaténation de tous les messages dans InfoSys.text.

    J'ai beaucoup de tests & autres commentaires dans mon code, vais voir si je peux le nettoyer/clarifier pour le poster...

    EDIT: cela dit, le code on l'a déjà ici, je rajoute juste un extrait du code graphique, car le problème c'est peut être juste le Binding au final

    commands.xaml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <TextBlock Name="InfoSysZone"
    Text="{Binding SelectedItem.Content, ElementName=InfoSysZone}"
    TextWrapping="Wrap" TextAlignment="Left" AllowDrop="False"
    Foreground="Gray" FontSize="14" />

Discussions similaires

  1. Accès aux méthodes de classes
    Par jimmypage dans le forum WinDev
    Réponses: 5
    Dernier message: 12/07/2012, 15h54
  2. PB acces méthode dans classe membrée
    Par untipy dans le forum Débuter
    Réponses: 2
    Dernier message: 15/09/2010, 15h28
  3. Réponses: 5
    Dernier message: 15/05/2007, 20h51
  4. Réponses: 5
    Dernier message: 01/02/2007, 13h14
  5. Réponses: 3
    Dernier message: 02/01/2007, 13h53

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