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 :

Assignation explicite dans une boucle if: problème


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2013
    Messages : 4
    Par défaut Assignation explicite dans une boucle if: problème
    Bonjour,

    Je souhaite créer une procédure dans laquelle j'envoie comme paramètre un objet (ListBox ou Combobox). Car le traitement est identique que ce soit un ListBox ou un ComboBox

    Lorsque la procédure reçoit l'objet, je dois l'assigner explicitement à son type.
    Exemple qui fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
           public static void Test(Object form_box)
            {
                ListBox form_box1 = (ListBox)form_box;
     
                int a=form_box1.Items.Count;
            }
    A priori, je ne sais pas si Objet est un ListBox ou un ComboBox, donc je fais un test pour vérifier son type.
    Le problème provient de la boucle if qui m'impose de déclarer l'objet en dehors de la boucle.
    Exemple qui ne fonctionne pas:
    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
     
      public static void Test(Object form_box)
            {
                Object form_box1 = null;
    //   ComboBox form_box1 = null;
     
                if (form_box is ListBox)
                {
                    form_box1 = (ListBox)form_box;
                }
                else if (form_box is ComboBox)
                {
                    form_box1 = (ComboBox)form_box;
                }
                else
                {
                    MessageBox.Show("Error_Type"); 
                }
                int a=form_box1.Items.Count;
            }
    MErci d'avance pour votre aide !

  2. #2
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public static void Test(Object form_box)
    {
        int a= 0 ;
        if      (form_box is ListBox ) { ListBox  form_ListBox  = (ListBox )form_box; a=form_ListBox .Items.Count; }            
        else if (form_box is ComboBox) { ComboBox form_ComboBox = (ComboBox)form_box; a=form_ComboBox.Items.Count; }            
        else MessageBox.Show("Error_Type");
    }

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 26
    Par défaut
    Salut Ch123,

    Il faut penser au plus grand dénominateur commun, qui dépend de ce que tu veux faire dans ton traitement.
    En l'occurrence, si le traitement ne concerne que la collection d'items, tu peux faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public Form1()
    {
        InitializeComponent();
     
        ListBox listBox = new ListBox();
        ComboBox comboBox = new ComboBox();
        test(listBox.Items);
        test(comboBox.Items);
    }
     
    void test(IList items)
    {
        int a = items.Count;
    }
    Ca s'appelle la loi de Demeter : http://msdn.microsoft.com/en-us/maga...aspx#id0070040

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2013
    Messages : 4
    Par défaut Créer une assignation explicite dépendante d'une condition if: problème
    Bonjour
    Merci bcp. pour vos deux propositions.

    Super idée d'envoyer en paramètre la Collection des Items. Je ne connaissais pas cette possibilité.
    Mais dans mon cas, le traitement que je veux faire ensuite, c'est entre autre de remplir la ListBox ou la ComboBox...

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     string[] Fichiers = Directory.GetFiles(myDir, Filtre);
                foreach (string Fichier in Fichiers)
                {
                    Console.WriteLine(Fichier);
                    form_box1.Items.Add(Fichier);
                }
    Dès lors, ca ne suffit pas la Collection des items. Il faut envoyer l'objet complet

    Concernant la première proposition, quitte à créer deux variables avec 2 traitements spécifiques, alors autant directement créer deux procédures indépendantes.

    Mon souhait est justement de n'avoir qu'une seule variable (et donc un seul traitement commun) que la variable d'entrée soit une ListBox ou une ComboBox

    Si vous avez d'autres idées...
    MErci d'avance,

  5. #5
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public static void Test(Object form_box)
    {
        if      (form_box is ListBox ) ProcessItems((ListBox )form_box.Items) ;            
        else if (form_box is ComboBox) ProcessItems((ComboBox)form_box.Items) ;            
        else MessageBox.Show("Error_Type");
    }
    
    public static void ProcessItems(ItemCollection Items)
    {
      a=Items.Count;
    }

  6. #6
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Sinon voici une solution à éviter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ItemCollection Items = form_box.GetType().GetProperty("Items").GetValue(form_box,null) ;

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

Discussions similaires

  1. Problème dans une boucle
    Par Pitou5464 dans le forum Access
    Réponses: 5
    Dernier message: 11/08/2006, 14h51
  2. Problème de SCANF dans une boucle WHILE
    Par FidoDido® dans le forum C
    Réponses: 4
    Dernier message: 30/12/2005, 17h42
  3. [Conception] Problème de test dans une boucle while
    Par Cyrius dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/11/2005, 18h07
  4. Problème avec une DLL dans une boucle For
    Par BraDim dans le forum Langage
    Réponses: 5
    Dernier message: 20/09/2005, 12h22
  5. Problème avec TNMSMTP dans une boucle.
    Par Orgied dans le forum Web & réseau
    Réponses: 3
    Dernier message: 07/04/2004, 10h19

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