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#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    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
    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
    Membre confirmé
    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
    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
    Membre confirmé
    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
    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)))
    {
    }

+ 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