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 :

Quel est la meilleure pratique


Sujet :

C#

  1. #1
    Membre régulier
    Profil pro
    Débutant
    Inscrit en
    Février 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Débutant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2007
    Messages : 127
    Points : 87
    Points
    87
    Par défaut Quel est la meilleure pratique
    Bonjour à tous,

    Je me pose une question pratique dans la manière de coder un événement d'un point de vue mémoire, rapidité, maintenabilité, ...

    Si je développe un usercontrol avec event de type selectionChanged comment vaut-il mieux le gerer :

    1. J'ai un evenement avec des arguments vide et je recupère la selection du control par une propriété
    2. Je mets la selection dans les argument de l'évenement ce qui me permet de les avoir directement

    Merci pour l'éclaircissement.

  2. #2
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 905
    Points : 1 923
    Points
    1 923
    Par défaut
    Voici une manière relativement classique de gérer ce genre de situation :

    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
        public class SelectionChangedEventArgs : EventArgs
        {
            public object OldItem { get; set; }
            public object NewItem { get; set; }
        }
     
        public delegate void SelectionChangedEventHandler(object sender, SelectionChangedEventArgs eventArgs);
     
        public interface INotifySelectionChanged
        {
            event SelectionChangedEventHandler SelectionChanged;
        }
     
        public class SelectionContainer : INotifySelectionChanged
        {
            private readonly List<object> _items = new List<object>();
            public object[] Items { get { return _items.ToArray(); } }
            public object Current { get; private set; }
     
            public void Add(object item) { if (!_items.Contains(item)) _items.Add(item); }
            public void Remove(object item)
            {
                if (_items.Contains(item))
                {
                    _items.Remove(item);
                    if (item == Current)
                    {
                        Current = null;
                        OnSelectionChanged(item, null);
                    }
                }
            }
            public bool Contains(object item)
            {
                return _items.Contains(item);
            }
     
            public void Select(object item)
            {
                if (!_items.Contains(item)) throw new InvalidOperationException("Item is not in container");
                var old = Current;
                Current = item;
                OnSelectionChanged(old, Current);
            }
     
            public event SelectionChangedEventHandler SelectionChanged;
     
            protected void OnSelectionChanged(object oldItem, object newItem)
            {
                var handler = SelectionChanged;
                if (handler != null) handler(this, new SelectionChangedEventArgs { OldItem = oldItem, NewItem = newItem });
            }
        }
    En l'occurrence j'ai une sélection d'un seul item (propriété Current), mais il ne devrait pas être trop difficile d'adapter pour prendre charge une sélection multiple. Il te faudra de toute façon transposer ce code sur un UserControl.

  3. #3
    Membre régulier
    Profil pro
    Débutant
    Inscrit en
    Février 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Débutant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2007
    Messages : 127
    Points : 87
    Points
    87
    Par défaut
    E fait je me demande si il vaut mieux faire

    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
     
    class EventArgsChanged
    {
    		private readonly list<String> _selection;
     
    		public list<String> Selection
    		{
    			get{ return _selection; }
    		}
     
    		public EventArgsReadWriteError(list<String> selection)
    		{
    			_selection = selection;
    		}
    }
     
    class test1
    {
    public list<String> prop1
    { ... }
     
    public event EventHandler<EventArgsChanged> SelectionChanged;
    private void OnReadWriteError(EventArgsChanged ev)
    {
    if (SelectionChanged != null) SelectionChanged(this, new ev(prop1));
    }
     
    }
     
     
    //traitement dans une autre class suite à l'évenement
    		void SelectionChanged(object sender, EventArgsChanged e)
    		{
    			List<string> temp = e.Selection;
    //Reste traitement
    		}
    ou

    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
     
    class test1
    {
    public list<String> prop1
    { ... }
     
    public event EventHandler SelectionChanged;
    private void OnReadWriteError(EventArgsChanged ev)
    {
    if (SelectionChanged != null) SelectionChanged(this, Args.Empty);
    }
     
    }
     
     
    //traitement dans une autre class suite à l'évenement
     
    private test1 objectAvecEvent; //est initialisé et fonctionne
     
    		void SelectionChanged(object sender, EventArgs e)
    		{
    			List<string> temp = objectAvecEvent.prop1;
    //Reste traitement
    		}
    La différence entre les deux est que mon evenement a un paramètre(1) tandis que l'autre a un argument vide(2).

    Du coup quelle est la meilleure manière de procéder d'un point de vue mémoire, rapidité, maintenabilité, ...

  4. #4
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 442
    Points
    4 442
    Par défaut
    bonjour

    2. Je mets la selection dans les argument de l'évenement ce qui me permet de les avoir directement
    MSDN Help Lib Fr à propos du class EventArgs :
    "Cette classe ne contient pas de données d'événement ; elle est utilisée par des événements qui ne passent pas d'informations d'état à un gestionnaire d'événements lorsqu'un événement est déclenché. Si le gestionnaire d'événements nécessite des informations d'état, l'application doit dériver une classe à partir de cette classe pour contenir les données.

    Par exemple, la classe System.AssemblyLoadEventArgs est utilisée pour contenir les données pour les événements de chargement d'assembly et contient System.Reflection.Assembly décrivant l'assembly chargé. "
    Cette méthode est nécessaire si on veut avoir des informations d'état sur l'évènement en plus de l'occurrence de l'évènement lui-même ...
    Avec la méthode 1. , après l'occurrence de l'évènement ,la dite propriété peut avoir changé entre temps ..

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

Discussions similaires

  1. Quel est le meilleur livre sur le SQL ?
    Par Marc Lussac dans le forum Livres
    Réponses: 78
    Dernier message: 03/10/2019, 20h04
  2. Quel est le meilleur script PHP de portail (CMS) ?
    Par Lana.Bauer dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 187
    Dernier message: 18/10/2012, 07h45
  3. Réponses: 87
    Dernier message: 06/07/2011, 15h33
  4. quel est le Meilleur language pour piloter le port serie ?
    Par flyfab dans le forum Langages de programmation
    Réponses: 7
    Dernier message: 21/07/2003, 10h03
  5. Quel est le meilleur Routeur-adsl ???
    Par loki dans le forum Développement
    Réponses: 4
    Dernier message: 12/11/2002, 18h05

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