Mon bool ne change pas de valeur, et l'ajouter d'un élément est infructueux

Messages postés
51
Date d'inscription
mercredi 2 janvier 2019
Statut
Membre
Dernière intervention
28 septembre 2019
- - Dernière réponse : Hamster18
Messages postés
51
Date d'inscription
mercredi 2 janvier 2019
Statut
Membre
Dernière intervention
28 septembre 2019
- 8 juin 2019 à 20:59
Bonjour j'essaye de mettre en place des utilisateurs, pour cela j'ai une classe Utilisateur, et dans cette classe une ObservableCollection d'utilisateur, pour me connecter je recherche dans cette liste et si l'utilisateur est trouver, je veux changer l'état du bool de connexion. Cependant je n'y arrive pas et ne vois pas la raison. De même j'ai voulus tenter un ajout d'utilisateur cependant, de la même manière cela ne fonctionne pas. Pourriez vous m'en expliquer la raison ?
Merci d'avance pour vos réponses.

Un utilisateur est :


        private bool conEtat;
        private bool ConEtat
        {         
                get
            {
                    return conEtat;
                }
                set
            {
                    conEtat = value;
                    OnPropertyChanged("ConEtat");
                }
           }
        
//J'ai mit mon ConEtat OnPropertyChanged pour être sur que l'erreur au niveau du bool, la valeur pouvais changer

        public Utilisateur(string nom, string prenom, string identifiant, string motDePasse, int age, bool conEtat)
        {
            this.Nom = nom;
            this.Prenom = prenom;
            this.Identifiant = identifiant;
            this.MotDePasse = motDePasse;
            this.Age = age;
            this.ConEtat = conEtat;
            //Un état de connexion est à false si l'utilisateur n'est pas connecter
        }




       public int VerifConnection(string identifiant, string motDePasse)
        {
            for (int i = 0; i < ListUtilisateur.Count(); i++)
            {
                if (ListUtilisateur[i].Identifiant == identifiant && ListUtilisateur[i].MotDePasse == motDePasse)
                {
                    if (ListUtilisateur[i].ConEtat == false)
                    {
                        ListUtilisateur[i].ConEtat= true;
// le bool que je cherche à modifier la valeur, true = connecter, false= deconnecter
                        return 0;
                    }
                }

            }
            return 1;
        }

La liste d'utilisateur

        public ObservableCollection<Utilisateur> ListUtilisateur { get; } =new ObservableCollection<Utilisateur>(){

                new Utilisateur ("Dragnir", "Natsu", "chasseur", "chasseur", 18, false),
                new Utilisateur ("Artfilia", "Lucy", "esprit", "esprit", 19, false)
};
        




        public Utilisateur Utilisateur2 { get; set; }


        private void Connecter_Click(object sender, RoutedEventArgs e)
        {

            Utilisateur2 = new Utilisateur (myValueNom(), myValuePrenom(), myValueIdentifiant(), myValueMotDePasse(), myValueAge(), false );
            Utilisateur2.ListUtilisateur.Add(Utilisateur2);
            int v = Utilisateur2.ListUtilisateur.Count;
//ce int sert seulement à vérifier le nombre d'utilisateur dans une liste
            var w = new MainWindow();
            w.Show();
            this.Close();

            Manager.SauvegardeListeUtilisateur(Utilisateur2.ListUtilisateur);

        }

Afficher la suite 

1 réponse

Messages postés
14565
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
13 octobre 2019
177
0
Merci
Dans ton code, tu as :
        private bool conEtat;
        private bool ConEtat{...}
...
public Utilisateur(string nom, string prenom, string identifiant, string motDePasse, int age, bool conEtat) 


Dans ton constructeur, conEtat c'est la variable d'objet ou le paramètre ?
Le compilateur ne peut pas forcément deviner ...

Nommes différemment tes variables/paramètres pour éviter tout risque de confusion.


A la place de :
for (int i = 0; i < ListUtilisateur.Count(); i++)
Préfères (sauf si l'indice est vraiment nécessaire, ce qui n'est pas le cas ici) :
foreach (var lUtilisateur in ListUtilisateur)
Aussi, dans ton for, la condition est évaluée à chaque tout, donc si tu as 100 tours, le .Count est recalculé 100 fois, prends l'habitude de stocker cette valeur en local.


As-tu essayer de regarder le comportement de l'application en pas à pas sur la ligne problématique ?
Hamster18
Messages postés
51
Date d'inscription
mercredi 2 janvier 2019
Statut
Membre
Dernière intervention
28 septembre 2019
-
oui j'ai mit plusieurs point d'arrêt et au moment ou le bool devrait changer bin il change pas
Commenter la réponse de NHenry