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 :

Condition IF qui verifie si un string est present dans une list [Débutant]


Sujet :

C#

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Janvier 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 60
    Points : 38
    Points
    38
    Par défaut Condition IF qui verifie si un string est present dans une list
    Bonjour je vous expose mon probleme dans son intégralité.

    Alors, je developpe une application asp.net/C# pour un Intranet d'entreprise en stage.
    J'ai plusieurs Pages qui contiennent differents controls (TextBox,Dropdownlist,Labels)
    et a plusieurs moment je souhaite Verifier ou vider tous ces controles (a part des exceptions !)

    j'ai donc creer une classe a part nomé GestionControls contenant 2 fonctions:

    La 1ere sert à tout nettoyer:

    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
     public void ClearControls(Control c)
            {
                
    
                foreach (Control c1 in c.Controls)
                {   
    
                    if (c1.GetType() == typeof(TextBox)) { ((TextBox)c1).Text = string.Empty; }
                    else if (c1.GetType() == typeof(DropDownList)) { ((DropDownList)c1).SelectedIndex = 0; }
                    else if (((c1.GetType() == typeof(Label)) && (c1.ID != "LBL_titleinfocomp"))) { ((Label)c1).Text = ""; }
    
                    if (c1.HasControls()) { ClearControls(c1); }
                }
            }
    La deuxieme sert a verifier si la personne as bien remplit tout les champs

    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
    
     public bool Formok(Control c)
            {
                bool mybool = true;
    
                foreach (Control c1 in c.Controls)
                {
    
                 if (?????????)
                {
                    if (c1.GetType() == typeof(TextBox))
                    {
                        if (((TextBox)c1).Text == "")
                        {
                            mybool = false;
                            ((TextBox)c1).Font.Bold = true;
                            ((TextBox)c1).Text = "Remplir ce champ";
                        }
                    }else if (c1.GetType() == typeof(DropDownList))
                    {
                        if (((DropDownList)c1).SelectedIndex == 0)
                        {
                            ((DropDownList)c1).Font.Bold = true;
                            mybool = false;
                        }
                    }
                }
              }
                return mybool;
            }


    Nous voyons dans:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     else if (((c1.GetType() == typeof(Label)) && (c1.ID != "LBL_titleinfocomp")))
    A la base je n'avais qu'un seul LBL que je ne devait pas "vider" alors je l'ai exclu dans la condition.


    Le probleme maintenant c'est que j'ai plusieurs label à exclure et j'ai pas envie de faire un truc sale du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     else if (((c1.GetType() == typeof(Label)) && (c1.ID != "LBL_titleinfocomp") && (c1.id != "blabla") x 10))
    Alors je pensais a faire une list avec tous les String des LBL à exclure
    style:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    List<string> List_exclu_LBL = new List<string>();
    List_exclu_LBL.add("LBL_a_exclure_N°1");
    List_exclu_LBL.add("LBL_a_exclure_N°2");
    Mais les questions sont:

    1) Ou mettre cette list ? (dans une nouvelle Classe "excludedcontrols") pour la mettre dans une methode et l'appeler dans ma classe de gestion de controls ?

    2) Comment former les conditions: Edit: Jsuis bete... (List_Excl_LBL.contains(c1.id) == false) en condition regle mon probleme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     else if (((c1.GetType() == typeof(Label)) && (c1.ID != de n'importe quel string contenue dans List_exclu_LBL))
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    
                foreach (Control c1 in c.Controls)
                {
    
                 if (c1.id != de list_exclu_LBL && c1.id != de list_exclu TXTB etc etc etc)
                {

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Tout élément qui implémente l'interface ICollection<> possède une méthode Contains. Les tableaux et les listes implémentent cette interface et donc possèdent cette méthode.

    Du coup, ta condition devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (!maListe.Contains(monElementCourant)) { }
    Et fais tout simplement une liste de contrôles qui contient tes éléments à exclure, ainsi tu pourras directement les zapper avec une requête Linq :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    foreach(Control ctrl in c.Controls.Where(c2 => !mesElementsExclus.Contains(c2)))
    {
    }
    La liste "mesElementsExclus" peut être déclarée en variable privée de ta classe et initialisée dans le constructeur.

    D'autre part, je te déconseille vivement de faire cette instruction pour ton usage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (c1.GetType() == typeof(TextBox))
    car si jamais l'un des contrôles dérive de TextBox (ce qui pourrait arriver pour des contrôles utilisateurs à l'avenir) il va passer à la trappe!
    Fais plutôt :
    cette instruction va vérifier si "c1" est un TextBox ou un dérivé de TextBox.

    N'hésites pas à faire "F1" sur les classes de Microsoft dès que nécessaire.

    Plus généralement, il est très important que tu potasses bien de la documentation concernant le C# et .NET en général pour apprendre les principes de base indispensables avant de te lancer dedans, sinon tu vas galérer à mort.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Janvier 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 60
    Points : 38
    Points
    38
    Par défaut
    [QUOTE=Ph_Gr;7813910]Bonjour,


    Et fais tout simplement une liste de contrôles qui contient tes éléments à exclure, ainsi tu pourras directement les zapper avec une requête Linq :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach(Control ctrl in c.Controls.Where(c2 => !mesElementsExclus.Contains(c2)))
    {
    }
    [QUOTE]

    Merci de ta reponse rapide et efficace


    sinon


    Le .Where n'est pas reconnu, un using a mettre en particulier ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par harghan Voir le message
    Le .Where n'est pas reconnu, un using a mettre en particulier ?
    Oui, pour les requêtes Linq il faut mettre :

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Janvier 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 60
    Points : 38
    Points
    38
    Par défaut
    Citation Envoyé par Ph_Gr Voir le message
    Oui, pour les requêtes Linq il faut mettre :
    mon using Sytem.Linq est deja présent.
    malgrés ca pas de c.Controls.Where apparant

  6. #6
    Invité
    Invité(e)
    Par défaut
    A mince, quel étourdi, j'avais oublié que le type de "Controls" n'implémente pas un IEnumerable générique.
    Il faut rajouter un "Cast<Control>" pour typer la collection d'abord :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach(Control ctrl in c.Controls.Cast<Control>().Where(c2 => !mesElementsExclus.Contains(c2)))
    {
    }

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Janvier 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 60
    Points : 38
    Points
    38
    Par défaut
    Citation Envoyé par Ph_Gr Voir le message
    A mince, quel étourdi, j'avais oublié que le type de "Controls" n'implémente pas un IEnumerable générique.
    Il faut rajouter un "Cast<Control>" pour typer la collection d'abord :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach(Control ctrl in c.Controls.Cast<Control>().Where(c2 => !mesElementsExclus.Contains(c2)))
    {
    }

    On ca marche merci mais comme j'ai plusieurs List d'exclusion et que je voulais que ce soit facilement lisible
    j'ai finit par mettre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if ((!ExcludedLBL.Contains(c1.ID)) && ((!ExcludedTXTB.Contains(c1.ID))) && ((!ExcludedDDL.Contains(c1.ID))))
    just apres le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    (Conctrol ctrl in c.Controls)
    P.S: j'ai divisé en plusieurs liste car à certains moment je ne doit pas exclure certains types de controls.

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

Discussions similaires

  1. Condition si un élément est déjà dans une liste
    Par biohazard401 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 13/06/2015, 00h55
  2. Réponses: 4
    Dernier message: 04/05/2012, 18h39
  3. Réponses: 5
    Dernier message: 20/08/2010, 10h01
  4. elements qui n'est pas dans une liste
    Par KEnder dans le forum Général Python
    Réponses: 2
    Dernier message: 16/05/2008, 01h52
  5. [Liste] Savoir si un élément est présent dans une liste
    Par Wookai dans le forum Collection et Stream
    Réponses: 11
    Dernier message: 02/05/2005, 20h44

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