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 :

Vider un combo


Sujet :

C#

  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur Développement Logiciel
    Inscrit en
    Septembre 2005
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Ingénieur Développement Logiciel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 290
    Par défaut Vider un combo
    Salut à tous,
    je remplir un combobox et je sélectionne l'élément voulu puis après des traitements je vide le combo comme suit:
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    cboAnnonceur.Items.clear();
    La liste est vidée mais l'élément selectionné (dans cboAnnonceur.text) demeure! (
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cboAnnonceur.text.clear();
    ) n'existe pas
    Je souhaite l'effacer aussi comment le faire?

    Merci d'avance!

  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
    Que veux tu faire exactement

    1- Eliminer tous les items de ton combo
    2- Mettre la selection a vide
    3- Les deux ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 222
    Par défaut
    MonCombo.SelectedText = ""

  4. #4
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Par défaut
    Citation Envoyé par alexadvance Voir le message
    MonCombo.SelectedText = ""
    à la limite String.Empty mais surtout pas ""

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 222
    Par défaut
    Citation Envoyé par Louis-Guillaume Morand Voir le message
    à la limite String.Empty mais surtout pas ""
    Je m'incline ! (A vouloir faire trop vite, on fait souvent trop mal !)

  6. #6
    Membre éclairé
    Homme Profil pro
    Ingénieur Développement Logiciel
    Inscrit en
    Septembre 2005
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Ingénieur Développement Logiciel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 290
    Par défaut
    Citation Envoyé par olibara Voir le message
    Que veux tu faire exactement

    1- Eliminer tous les items de ton combo
    2- Mettre la selection a vide
    3- Les deux ?
    Je souhaite faire les deux!

  7. #7
    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
    Personnelement je travaille essentiellement avec des combo bindé dans lequel je mets le selectedvalue a -1

    Mais dans ton cas il me semble que le clear et le String.Empty devraient faire l'affaire

  8. #8
    Membre éclairé
    Homme Profil pro
    Ingénieur Développement Logiciel
    Inscrit en
    Septembre 2005
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Ingénieur Développement Logiciel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 290
    Par défaut
    Citation Envoyé par olibara Voir le message
    Personnelement je travaille essentiellement avec des combo bindé dans lequel je mets le selectedvalue a -1

    Mais dans ton cas il me semble que le clear et le String.Empty devraient faire l'affaire
    j'ai fait les deux mais rien ne se passe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cboAnnonceur.Items.clear();
    cboAnnonceur.SelectedText=String.empty
    Mais rien ne se pas. Je poste ici tout mon 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
     
    private void cboAnnonceur_SelectedIndexChanged(object sender, EventArgs e)
            {
                cboAnnonceurGetCode(cboAnnonceur.Text);
                EditStatus = "I";
                FrmEditionStatus(EditStatus);
                cboMarque.Items.Clear();
                cboMarque.SelectedText=string.Empty;            
                RemplirCboMarque(CboAnnonceurCode.Text);
     
            }      
            private void cboMarque_SelectedIndexChanged(object sender, EventArgs e)
            {
                cboMarqueGetCode(cboMarque.Text);
                EditStatus = "I";
                FrmEditionStatus(EditStatus);
                cboProduit.Items.Clear(); 
                cboProduit.SelectedText=string.Empty;
                RemplirCboProduit(cboMarqueCode.Text);
            }
    Ainsi, si l'on change modifie le contenue de cboAnnonceur, le cboMarque se vide de ses items et du texte (eventuellement sélectioné) et Ainsi de suite...

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 99
    Par défaut
    Citation Envoyé par Louis-Guillaume Morand Voir le message
    à la limite String.Empty mais surtout pas ""
    Citation Envoyé par alexadvance
    Je m'incline ! (A vouloir faire trop vite, on fait souvent trop mal !)
    Pourquoi ? (puisqu'il faut une chaîne)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    static void Main(string[] args)
    {
         Console.WriteLine(Object.ReferenceEquals("", String.Empty) ? "C'est la même" : "Ce n'est pas la même");
    }
    testé avec VS2008 et VS2010.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 222
    Par défaut
    Citation Envoyé par realpasso Voir le message
    Pourquoi ?
    Je dirai que String.Empty est tout de meme plus lisible. Ca veut dire "J'instancie à vide car la valeur n'a pas d'importance" alors que 'chaine vide' peut vouloir dire "la valeur de ma chaine est vide" ...

    Une histoire d'habitude et de clarté, je pense...

    Pour en revenir au probleme de "le gris" :

    Citation Envoyé par Le gris
    Mais rien ne se pas. Je poste ici tout mon code..
    Avec ce code, ton "cboMarque" ne se vide pas quand tu changes la sélection de "cboAnnonceur" ?

  11. #11
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 99
    Par défaut
    Citation Envoyé par alexadvance Voir le message
    Je dirai que String.Empty est tout de meme plus lisible. Ca veut dire "J'instancie à vide car la valeur n'a pas d'importance" alors que 'chaine vide' peut vouloir dire "la valeur de ma chaine est vide" ...
    Avoue, tu ne serais pas consultant toua ? ;-)

  12. #12
    Membre éclairé
    Homme Profil pro
    Ingénieur Développement Logiciel
    Inscrit en
    Septembre 2005
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Ingénieur Développement Logiciel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 290
    Par défaut
    Citation Envoyé par alexadvance Voir le message
    Pour en revenir au probleme de "le gris" :

    Avec ce code, ton "cboMarque" ne se vide pas quand tu changes la sélection de "cboAnnonceur" ?
    le cboMarque se vide de ses items mais pas du texte qui est en sélection dans le "cboMarque.text" or d'après le ode, il est mis à Empty!!!! Je suis un peu embêté j'avoue.

    Je continue de chercher les problème! Merci pour vos réponses!

  13. #13
    Membre éclairé
    Homme Profil pro
    Ingénieur Développement Logiciel
    Inscrit en
    Septembre 2005
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Ingénieur Développement Logiciel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 290
    Par défaut
    Bonjour à tous je viens d'avoir ce que je cherche: Et le tour est Joué!

    Merci infiniment pour votre aide à tous!

  14. #14
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Par défaut
    ca n'a RIEN à voir avec de la clarté, celui qui utilise "" ne connait pas la CLR tout simplement. les bases types sont par valeur mais pas String, or si tu fais "" tu instancies un objet qui contient "", alors que String.Empty non.

    si on suit votre logique, avec dix champs à reset, vous faites dix fois ="" et donc vous instanciez dix objets qui ne servent à rien. pour quelle raison? parce que "ca revient au même"?

    c'est sûr que si le résultat c'est de mettre à vide, on peut faire ca de mille façons maintenant, y a la façon propre et la façon sale. Votre "", c'est sale car contre-performant.

    de la meme façon que je vois souvent
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if( maChaine ==  null || maChaine == "") // ou String.Empty)
    {
     
    }
    là encore c'est sale car il FAUT utiliser String.IsNullOrEmpty(maChaine)
    pourquoi? parce que cette méthode teste la longueur de la chaine et pas sa valeur. Il est BEAUCOUP plus rapide de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (maChaine.Length == 0)
    que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(maChaine == String.Empty)
    performance parlant bien entendu


    ca peut paraitre trivial ou superficiel sauf que c'est en cumulant plein de petits best-practices que l'on obtient un code plus propre. Si on garde des mauvaises habitudes, le jour où vous ferez du temps réel ou de l'embarqué, votre code sera inutilisable :/

  15. #15
    Membre éclairé
    Homme Profil pro
    Ingénieur Développement Logiciel
    Inscrit en
    Septembre 2005
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Ingénieur Développement Logiciel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 290
    Par défaut
    Citation Envoyé par Louis-Guillaume Morand Voir le message
    ca n'a RIEN à voir avec de la clarté, celui qui utilise "" ne connait pas la CLR tout simplement. les bases types sont par valeur mais pas String, or si tu fais "" tu instancies un objet qui contient "", alors que String.Empty non.

    si on suit votre logique, avec dix champs à reset, vous faites dix fois ="" et donc vous instanciez dix objets qui ne servent à rien. pour quelle raison? parce que "ca revient au même"?

    c'est sûr que si le résultat c'est de mettre à vide, on peut faire ca de mille façons maintenant, y a la façon propre et la façon sale. Votre "", c'est sale car contre-performant.

    de la meme façon que je vois souvent
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if( maChaine ==  null || maChaine == "") // ou String.Empty)
    {
     
    }
    là encore c'est sale car il FAUT utiliser String.IsNullOrEmpty(maChaine)
    pourquoi? parce que cette méthode teste la longueur de la chaine et pas sa valeur. Il est BEAUCOUP plus rapide de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (maChaine.Length == 0)
    que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(maChaine == String.Empty)
    performance parlant bien entendu


    ca peut paraitre trivial ou superficiel sauf que c'est en cumulant plein de petits best-practices que l'on obtient un code plus propre. Si on garde des mauvaises habitudes, le jour où vous ferez du temps réel ou de l'embarqué, votre code sera inutilisable :/
    Merci pour toutes ces précisions! j'en prendrai bonne note.

  16. #16
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 99
    Par défaut
    Citation Envoyé par Louis-Guillaume Morand Voir le message
    ca n'a RIEN à voir avec de la clarté, celui qui utilise "" ne connait pas la CLR tout simplement. les bases types sont par valeur mais pas String, or si tu fais "" tu instancies un objet qui contient "", alors que String.Empty non.
    OK. Pour valider votre propos, expliquez le résultat suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Console.WriteLine(Object.ReferenceEquals("", String.Empty) ? "Aucune instance créée" : "instance créée");

    aucune instance créée


    Each string literal does not necessarily result in a new string instance. When two or more string literals that
    are equivalent according to the string equality operator (§14.9.7), appear in the same assembly, these string
    literals refer to the same string instance.
    J'ai cru entendre que MS compte en faire une option de compile. Je file réviser la CLR...

    edit: la bonne solution c'est olibara qui l'a donnée : selectedindex = -1 avant le clear.

  17. #17
    Membre éclairé
    Homme Profil pro
    Ingénieur Développement Logiciel
    Inscrit en
    Septembre 2005
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Ingénieur Développement Logiciel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 290
    Par défaut
    Citation Envoyé par realpasso Voir le message
    edit: la bonne solution c'est olibara qui l'a donnée : selectedindex = -1 avant le clear.
    Je teste cette solution! Merci encore une fois.

  18. #18
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Par défaut
    Citation Envoyé par realpasso Voir le message
    OK. Pour valider votre propos, expliquez le résultat suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Console.WriteLine(Object.ReferenceEquals("", String.Empty) ? "Aucune instance créée" : "instance créée");

    aucune instance créée


    Each string literal does not necessarily result in a new string instance. When two or more string literals that
    are equivalent according to the string equality operator (§14.9.7), appear in the same assembly, these string
    literals refer to the same string instance.

    J'ai cru entendre que MS compte en faire une option de compile. Je file réviser la CLR...

    edit: la bonne solution c'est olibara qui l'a donnée : selectedindex = -1 avant le clear.

    parce qu'il te faut aussi prendre en compte, si je dis pas de betise, que String.Empty pointe vers une valeur readonly déjà existante qui te retourne "", et c'est là que tu y gagnes en performance (même si c'est ultra mineur).
    Après, il te suffit de taper "String.Empty vs "" sur google, ce sujet a été débattu par moultes personnes et accepté de façon unanime, y compris par les équipes Dev de Microsoft, je ne puis que suivre leur avis tel un mouton

  19. #19
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 99
    Par défaut
    Citation Envoyé par Louis-Guillaume Morand Voir le message
    parce qu'il te faut aussi prendre en compte, si je dis pas de betise, que String.Empty pointe vers une valeur readonly déjà existante qui te retourne "", et c'est là que tu y gagnes en performance (même si c'est ultra mineur).
    Après, il te suffit de taper "String.Empty vs "" sur google, ce sujet a été débattu par moultes personnes et accepté de façon unanime, y compris par les équipes Dev de Microsoft, je ne puis que suivre leur avis tel un mouton
    J'ai participé à ces discussions EN 2002, MS a trouvé amusant pendant ces 8 années passées d'ajouter cette optimisation au JIT.

    Mais ce n'est pas tout, en utilisant "" le compilateur peut faire certaines optimisations qu'il ne pourra pas faire avec String.Empty
    (c'est un exemple stupide je l'admets mais qui sert à démontrer ce que je dis)
    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
     
    for (int x = 0; x < 20; x++)
    {
         System.Threading.Thread.Sleep(1);
         var timer = new System.Diagnostics.Stopwatch();
         timer.Start();
     
         for (int i = 0; i < 10000000; i++)
         {
              String test = "" + "hello";
         }
     
         timer.Stop();
         Console.WriteLine("Plop " + timer.ElapsedMilliseconds + " ms");
    }
    Sur mon pc ça prends environ 20ms avec "" (le compilateur peut virer tout l'interieur de la boucle i car "" n'a pas d'effet de bord) et + de 100 ms avec String.Empty car le compilateur ne connait pas l'effet de bord qu'il y aurait à ne pas appeler String.Empty.

    "early optimisation is the root of all evil", laissez le compilateur et le JIT travailler.

    Pour ma part, j'arrête là ce thread qui consistait à vider une combo. Désolé d'avoir rebondi sur quelque chose qui n'avait rien à voir.

  20. #20
    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
    Et voila olibara qui revient a la surface

    +1 pour realpasso et JGM

    J'apprecie a armes egales la constance academique de JGM qui peut aider beaucoup les moutons égarés
    Tout autant que la sagacité investigatrice de realpasso qui permet de mieux comprendre certains nouveaux chemins !
    Grace a des membres comme vous, ce forums a toute son âme et sa qualité !

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

Discussions similaires

  1. [Débutant] vider les tout les champs text et combo dans un tabcontrol
    Par nabileon dans le forum VB.NET
    Réponses: 3
    Dernier message: 19/01/2013, 16h26
  2. [Système] Vider le Presse Papier
    Par babe dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 04/09/2002, 18h46
  3. vider un timage
    Par gIch dans le forum Composants VCL
    Réponses: 2
    Dernier message: 24/08/2002, 00h58
  4. Vider le buffer du clavier
    Par flavien tetart dans le forum x86 16-bits
    Réponses: 2
    Dernier message: 12/07/2002, 09h35
  5. Comment vider un dossier ?
    Par Zinoc dans le forum C++Builder
    Réponses: 3
    Dernier message: 25/06/2002, 15h14

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