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 :

[C#] Passer une référence à une fonction


Sujet :

C#

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2003
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 22
    Par défaut [C#] Passer une référence à une fonction
    Bonjour,

    Voilà, je ne sais pas si c'est possible mais j'ai une fonction F1 qui pourrait être appelée plusieurs fois par une autre fonction F2, néanmoins le traitement fait par F1 dépend d'un champ qui se trouve dans F2. Bref, je ne suis pas clair, alors voici le code :
    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
    31
    32
    33
    34
            private void LoadLineChartData(string Title, int i)
            {
                mcChart.Series.Clear();
    
                var ls = new LineSeries();
                ls.IndependentValuePath = "Key";
                ls.DependentValuePath = "Value";
                ls.Title = Title;
                //a.DataPointStyle = adps;
                var list = new List<KeyValuePair<DateTime, double>>();
                foreach (Analyse analyse in _AnalyseCollection)
                {
    
                    list.Add(new KeyValuePair<DateTime, double>(analyse.Date, double.Parse(analyse.KH)));
                }
                ls.ItemsSource = list;
                mcChart.Series.Add(ls);
            }
    
            private void LoadGraph_Click(object sender, RoutedEventArgs e)
            {
                int i = 0;
                if (chckBxKH.IsChecked == true)
                {
                    LoadLineChartData("KH", i);
                    i++;
                }
                if (chckBxPH.IsChecked == true)
                {
                    LoadLineChartData("PH", i);
                    i++;
                }
            }
    C'est donc une collection de données qui sert à afficher un graphique. Hors, je voudrais indiquer dans mon appel à LoadLineChartData quel champ de ma collection à utiliser. Mais comment faire ?

    Merci pour votre aide car en plus ce n'est vraiment pas clair !

  2. #2
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Non c'est pas tres clair

    Si je comprends bien LoadLineChartData c'est F1
    LoadGraph_Click c'est Donc F2


    C'est donc quoi dans F2 que tu ne parviens pas a passer a F1 ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2003
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 22
    Par défaut
    Citation Envoyé par olibara Voir le message
    Non c'est pas tres clair

    Si je comprends bien LoadLineChartData c'est F1
    LoadGraph_Click c'est Donc F2
    Exact

    Citation Envoyé par olibara Voir le message
    C'est donc quoi dans F2 que tu ne parviens pas a passer a F1 ?
    En fait, dans ma collection, j'ai plusieurs données disponibles. Hors si la case est cochée, je dois donc charger les données sur le graph. Dans l'exemple, c'est analyse.KH qui est indiqué en dur dans la fonction LoadLineData. Comment faire pour que ce soit analyse.PH qui soit chargé lors du deuxième appel fait dans LoadGraph_Click ?

  4. #4
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Tu parle de LoadLineChartData je présume ?

    Qu'est ce qui t'empeche de passer ta collection en parametre de cette methode ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2003
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 22
    Par défaut
    Citation Envoyé par olibara Voir le message
    Tu parle de LoadLineChartData je présume ?

    Qu'est ce qui t'empeche de passer ta collection en parametre de cette methode ?
    En fait, en fonction de l'appel, si la case est cochée ou non, j'appelle tel ou tel attribut de ma collection.

    Exemple : case KH cochée, alors dans LoadLineChartData, c'est l'attribut analyse.KH qui est appelé.
    case PH cochée, alors dans LoadLineChartData, c'est l'attribut analyse.PH qui est appelé.

    mais je ne sais pas comment faire.

  6. #6
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Salut

    Si c'est toi qui a écrit le code en exemple je ne comprends pas bien ce que tu ne parviens pas à faire qui me semble trivial, ou alors je n'ai rien compris a la question

    Mais si ce n'est pas toi qui a écris ce code, le domaine de la question et de la réponse deviens plus vaste

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Août 2003
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 22
    Par défaut
    Citation Envoyé par olibara Voir le message
    Salut

    Si c'est toi qui a écrit le code en exemple je ne comprends pas bien ce que tu ne parviens pas à faire qui me semble trivial, ou alors je n'ai rien compris a la question

    Mais si ce n'est pas toi qui a écris ce code, le domaine de la question et de la réponse deviens plus vaste
    J'ai écrit une partie du code, après avoir vi comment utiliser les controles Chart sur codeplex.

    Je pourrais faire ça, mais je trouve cela pas pratique, ça alourdit le code, d'autant plus que j'ai de nombreux attributs :

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    private void LoadGraph_Click(object sender, RoutedEventArgs e)
            {
                int i = 0;
                mcChart.Series.Clear();
    
                  if (chckBxKH.IsChecked == true)
                {
                var ls = new LineSeries();
                ls.IndependentValuePath = "Key";
                ls.DependentValuePath = "Value";
                ls.Title = Title;
                //a.DataPointStyle = adps;
                var list = new List<KeyValuePair<DateTime, double>>();
                foreach (Analyse analyse in _AnalyseCollection)
                {
    
                    list.Add(new KeyValuePair<DateTime, double>(analyse.Date, double.Parse(analyse.KH)));
                }
                ls.ItemsSource = list;
                mcChart.Series.Add(ls);
                    i++;
                }
                if (chckBxPH.IsChecked == true)
                {
                              var ls = new LineSeries();
                ls.IndependentValuePath = "Key";
                ls.DependentValuePath = "Value";
                ls.Title = Title;
                //a.DataPointStyle = adps;
                var list = new List<KeyValuePair<DateTime, double>>();
                foreach (Analyse analyse in _AnalyseCollection)
                {
    
                    list.Add(new KeyValuePair<DateTime, double>(analyse.Date, double.Parse(analyse.PH)));
                }
                ls.ItemsSource = list;
                mcChart.Series.Add(ls);
                    i++;
                }
            }
    Que proposerais-tu ?

  8. #8
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Je te propose de relire certains cours sur l'appel de méthodes et le passage de paramètres


    http://dotnet.developpez.com/cours/

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Août 2003
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 22
    Par défaut
    Citation Envoyé par olibara Voir le message
    Je te propose de relire certains cours sur l'appel de méthodes et le passage de paramètres


    http://dotnet.developpez.com/cours/
    OK. Maintenant, peux-tu me faire une proposition ? Tout simplement me dire si c'est possible ou pas ?

  10. #10
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Citation Envoyé par boujouman
    OK. Maintenant, peux-tu me faire une proposition ? Tout simplement me dire si c'est possible ou pas ?
    Mais je t'ai déja fait cette proposition

    Citation Envoyé par olibara Voir le message
    Qu'est ce qui t'empeche de passer ta collection en parametre de cette methode ?

  11. #11
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 203
    Par défaut
    J'ai peut être pas bien compris le problème, mais apparemment tu as 2 fois le même bloc de code donc pourquoi tu ne fais pas un truc tout simple comme :
    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
     
    	private void LoadGraph_Click(object sender, RoutedEventArgs e)
            {
                mcChart.Series.Clear();
     
    			LoadGraph( chckBxKH.IsChecked);
    			LoadGraph( chckBxPH.IsChecked);          
            }
     
     
    		void LoadGraph( bool isChecked)
    		{
    		    if (isChecked == true)
                {
    				var ls = new LineSeries();
    				ls.IndependentValuePath = "Key";
    				ls.DependentValuePath = "Value";
    				ls.Title = Title;
    				//a.DataPointStyle = adps;
    				var list = new List<KeyValuePair<DateTime, double>>();
    				foreach (Analyse analyse in _AnalyseCollection)
    				{
     
    					list.Add(new KeyValuePair<DateTime, double>(analyse.Date, double.Parse(analyse.KH)));
    				}
    				ls.ItemsSource = list;
    				mcChart.Series.Add(ls);
                }
    		}

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Août 2003
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 22
    Par défaut
    Citation Envoyé par matdur Voir le message
    J'ai peut être pas bien compris le problème, mais apparemment tu as 2 fois le même bloc de code donc pourquoi tu ne fais pas un truc tout simple comme :
    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
     
    	private void LoadGraph_Click(object sender, RoutedEventArgs e)
            {
                mcChart.Series.Clear();
     
    			LoadGraph( chckBxKH.IsChecked);
    			LoadGraph( chckBxPH.IsChecked);          
            }
     
     
    		void LoadGraph( bool isChecked)
    		{
    		    if (isChecked == true)
                {
    				var ls = new LineSeries();
    				ls.IndependentValuePath = "Key";
    				ls.DependentValuePath = "Value";
    				ls.Title = Title;
    				//a.DataPointStyle = adps;
    				var list = new List<KeyValuePair<DateTime, double>>();
    				foreach (Analyse analyse in _AnalyseCollection)
    				{
     
    					list.Add(new KeyValuePair<DateTime, double>(analyse.Date, double.Parse(analyse.KH)));
    				}
    				ls.ItemsSource = list;
    				mcChart.Series.Add(ls);
                }
    		}
    Oui c'est pas mal non plus, mais mon problème n'est pas solutionné. Regardez au bout de cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    list.Add(new KeyValuePair<DateTime, double>(analyse.Date, double.Parse(analyse.KH)));
    J'ai l'attribut qui doit changer en fonction de l'appelant (la checkbox). SI c'est la case KH qui est cochée, ce doit être l'attribut analyse.KH qui doit être appelé, si c'est la case PH qui est cochée, ce doit être l'attribut analyse.PH qui doit être appelé. Hors je ne sais pas faire ça...

  13. #13
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 203
    Par défaut
    Un truc du style :

    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
    31
     
     
    private void LoadGraph_Click(object sender)
            {
               mcChart.Series.Clear();
     
    			LoadGraph( chckBxKH.IsChecked, analyse => analyse.KH);
    			LoadGraph( chckBxPH.IsChecked, analyse => analyse.PH);          
            }
     
     
    		private LoadGraph(bool isChecked, Func<string, Analyse> analysefunc)
    		{
    		    if (isChecked == true)
    		    {
    		        var ls = new LineSeries();
    		        ls.IndependentValuePath = "Key";
    		        ls.DependentValuePath = "Value";
    		        ls.Title = Title;
    		        //a.DataPointStyle = adps;
    		        var list = new List<KeyValuePair<DateTime, double>>();
    		        foreach (Analyse analyse in _AnalyseCollection)
    		        {
     
    		            list.Add(new KeyValuePair<DateTime, double>(analyse.Date, double.Parse(analysefunc( analyse)));
    		        }
    		        ls.ItemsSource = list;
    		        mcChart.Series.Add(ls);
    		    }
     
    		}

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Août 2003
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 22
    Par défaut
    Citation Envoyé par matdur Voir le message
    Un truc du style :

    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
    31
     
     
    private void LoadGraph_Click(object sender)
            {
               mcChart.Series.Clear();
     
    			LoadGraph( chckBxKH.IsChecked, analyse => analyse.KH);
    			LoadGraph( chckBxPH.IsChecked, analyse => analyse.PH);          
            }
     
     
    		private LoadGraph(bool isChecked, Func<string, Analyse> analysefunc)
    		{
    		    if (isChecked == true)
    		    {
    		        var ls = new LineSeries();
    		        ls.IndependentValuePath = "Key";
    		        ls.DependentValuePath = "Value";
    		        ls.Title = Title;
    		        //a.DataPointStyle = adps;
    		        var list = new List<KeyValuePair<DateTime, double>>();
    		        foreach (Analyse analyse in _AnalyseCollection)
    		        {
     
    		            list.Add(new KeyValuePair<DateTime, double>(analyse.Date, double.Parse(analysefunc( analyse)));
    		        }
    		        ls.ItemsSource = list;
    		        mcChart.Series.Add(ls);
    		    }
     
    		}
    Merci je vais regarder ça. J'avoue ne pas comprendre comment cela fonctionne.

  15. #15
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    L'excellent cours de Serge Tahé

    http://tahe.developpez.com/dotnet/csharp/

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Août 2003
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 22
    Par défaut
    Citation Envoyé par olibara Voir le message
    L'excellent cours de Serge Tahé

    http://tahe.developpez.com/dotnet/csharp/
    Merci je vais regarder ça ! Je vous dis si ça fonctionne tout à l'heure

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Août 2003
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 22
    Par défaut
    Salut,

    J'ai regardé le code hier soir et ceci ne peut pas fonctionner.
    En fait, je vais essayer d'être plus clair sur le besoin global, ce qui permettra de comprendre davantage et même de savoir si c'est possible.

    Le principe consiste à faire des tests d'eau et de vérifier certains paramètres tous les jours. J'ai donc créé une classe Analyse qui contient différents attributs comme PH, KH...

    Je souhaite afficher les valeurs dans un graphe. Ayant des analyses tous les jours, je crée une collection d'analyses que j'appelle AnalyseCollection.

    Ensuite, si la case correspondant à un des tests de l'analyse est cochée, je souhaite afficher la ligne sur le graphe. Or je souhaiterais que ma fonction de chargement de graphique puisse être la même pour tous les attributs. Or comment charger l'attribut en question dans la fonction ? D'où le passage en référence... ?

    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
    private void LoadGraph_Click(object sender)
    {
          mcChart.Series.Clear();
          // Ne peut pas fonctionner car le analyse de analyse.KH n'est pas connu dans la méthode
          LoadGraph( chckBxKH.IsChecked, analyse => analyse.KH);
          LoadGraph( chckBxPH.IsChecked, analyse => analyse.PH);          
    }
     
    private LoadGraph(bool isChecked, Func<string, Analyse> analysefunc)
    {
          if (isChecked == true)
          {
                    var ls = new LineSeries();
    		ls.IndependentValuePath = "Key";
    		ls.DependentValuePath = "Value";
    		ls.Title = Title;
    		var list = new List<KeyValuePair<DateTime, double>>();
    		foreach (Analyse analyse in _AnalyseCollection)
    		{
    		      list.Add(new KeyValuePair<DateTime, double>(analyse.Date, double.Parse(analysefunc( analyse)));
    		}
    		ls.ItemsSource = list;
    		mcChart.Series.Add(ls);
          }
     }
    Si quelqu'un a une idée, si c'est tout simplement possible ou pas ?

    Merci !

  18. #18
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 203
    Par défaut
    J'ai regardé le code hier soir et ceci ne peut pas fonctionner.
    Est ce que tu as testé le code ? Qu'est ce qui ne marche pas ?

    Or je souhaiterais que ma fonction de chargement de graphique puisse être la même pour tous les attributs
    Je comprends pas, ta fonction LoadGraph() est la même pour tous les paramétrés, tu passes simplement en paramètre de la fonction le booléen qui représente la valeur de la checkbox et un delegate qui retourne la valeur de l'attribut.

  19. #19
    Membre averti
    Profil pro
    Inscrit en
    Août 2003
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 22
    Par défaut
    Citation Envoyé par matdur Voir le message
    Est ce que tu as testé le code ? Qu'est ce qui ne marche pas ?



    Je comprends pas, ta fonction LoadGraph() est la même pour tous les paramétrés, tu passes simplement en paramètre de la fonction le booléen qui représente la valeur de la checkbox et un delegate qui retourne la valeur de l'attribut.
    J'ai indiqué dans le code ce qui ne peut pas fonctionner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    private void LoadGraph_Click(object sender)
    {
          mcChart.Series.Clear();
          // Ne peut pas fonctionner car le analyse de analyse.KH n'est pas connu dans la méthode
          LoadGraph( chckBxKH.IsChecked, analyse => analyse.KH);
          LoadGraph( chckBxPH.IsChecked, analyse => analyse.PH);          
    }

  20. #20
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 203
    Par défaut
    Est ce que ça compile ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 0
    Dernier message: 17/02/2013, 20h27
  2. Passer une référence à une classe dans un constructeur
    Par alefriedx dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 09/02/2011, 22h07
  3. Aide pour une ramener une info en fonction d'une date maximum
    Par dessinateurttuyen dans le forum SQL
    Réponses: 7
    Dernier message: 31/10/2008, 16h52
  4. Comment faire une référence à une figure ?
    Par aminos40 dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 2
    Dernier message: 06/07/2007, 11h43
  5. Réponses: 17
    Dernier message: 24/11/2006, 18h25

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