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 :

Refresh de combox box


Sujet :

C#

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 114
    Points : 71
    Points
    71
    Par défaut Refresh de combox box
    Bonjour !

    Lors de la création d'un User Component, je charge dans mes comboboxs leurs valeurs comme suit :

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    using System;
    using System.Windows.Forms;
     
    namespace MyUserControls
    {
        public partial class Characters : UserControl
        {
            public Characters()
            {
                InitializeComponent();
                cb_element.DataSource = Enum.GetValues(typeof(Elements));
            }
     
            public enum Elements
            {
                Moon = 0, Sun = 1, Star = 2, Spirit = 4
            };
     
            public enum Moon
            {
                Moon = 0, Moonlight = 1, Lunar = 2
            };
     
            public enum Sun
            {
                Sun = 0, Sunlight = 1, Solar = 2
            };
     
            public enum Star
            {
                Star = 0, Starlight = 1, Stellar = 2
            };
     
            public enum Spirit
            {
                Spiritual = 0, Twilight = 1, Astral = 2
            };
     
            private void cb_element_SelectedIndexChanged(object sender, EventArgs e)
            {
                if (cb_element.SelectedIndex == 0)
                {
                    cb_level.DataSource = Enum.GetValues(typeof(Moon));
                    cb_level.Refresh();
                }
                if (cb_element.SelectedIndex == 1)
                {
                    cb_level.DataSource = Enum.GetValues(typeof(Moon));
                    cb_level.Refresh();
                }
                if (cb_element.SelectedIndex == 2)
                {
                    cb_level.DataSource = Enum.GetValues(typeof(Moon));
                    cb_level.Refresh();
                }
                if (cb_element.SelectedIndex == 3)
                {
                    cb_level.DataSource = Enum.GetValues(typeof(Moon));
                    cb_level.Refresh();
                }
            }
        }
    }
    Au premier chargement, les deux comboxbox se mettent à jour... mais lorsque je clique à nouveau pour changer la comboxbox, elle ne se met pas à nouveau à jour.

    Pourtant, j'ai vérifié avec messagebox, le selectedindex change bien...

    Je suis un peu perdue sur le pourquoi du comment ^^".
    S'il n'y a que les imbéciles qui ne changent pas d'avis, mes clients sont des génies.

    Aet, Ukyuu.

  2. #2
    Membre éprouvé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 487
    Points : 945
    Points
    945
    Par défaut
    Bonjour,

    Dans les if de ton SelectedIndexChanged (que tu pourrais transformer en switch soit dit en passant) tu n'utilises que Enum.GetValues(typeof(Moon)), tu ne cherches pas à mettre d'autres valeurs. Est ce normal ?
    Mon blog sur les technos .NET et Agile -> http://blog.developpez.com/maximepalmisano/

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 114
    Points : 71
    Points
    71
    Par défaut
    Nope, j'ai fait un malencontreux copié-collé.

    Le code actuel est

    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
     
    private void cb_element_SelectedIndexChanged(object sender, EventArgs e)
            {
                if (cb_element.SelectedIndex == 0)
                {
                    cb_level.DataSource = Enum.GetValues(typeof(Moon));
                }
                if (cb_element.SelectedIndex == 1)
                {
                    cb_level.DataSource = Enum.GetValues(typeof(Sun));
                    cb_level.Update();
                }
                if (cb_element.SelectedIndex == 2)
                {
                    cb_level.DataSource = Enum.GetValues(typeof(Star));
                    cb_level.Refresh();
                }
                if (cb_element.SelectedIndex == 3)
                {
                    cb_level.DataSource = Enum.GetValues(typeof(Spirit));
                    cb_level.Refresh();
                }
            }
    Mais il se refuse tout de même à me donner le résultat escompté.

    (J'avais copié le code d'avant que je change les noms d'énum, pardon !)

    Ce serait plus propre avec un switch?
    S'il n'y a que les imbéciles qui ne changent pas d'avis, mes clients sont des génies.

    Aet, Ukyuu.

  4. #4
    Membre éprouvé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 487
    Points : 945
    Points
    945
    Par défaut
    Aucun soucis, c'est juste que des fois l'erreur est tellement grosse qu'on ne fait pas gaffe au copier coller :p

    Sinon, si j'ai bien compris, quand tu lances ton appli, la première combobox se charge. Ensuite, tu sélectionnes un item, et la deuxième combobox se charge avec les bons éléments.

    Par contre, tu as beau changer d'élément après ça ne change pas le contenu de ta seconde combobox, c'est bien ça ?

    J'avoue ne pas savoir d'où ça vient mais pourquoi tu ne binderais pas ta deuxième combobox sur une Liste que tu remplirais selon la première sélection ?

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    using System;
    using System.Windows.Forms;
     
    namespace MyUserControls
    {
        public partial class Characters : UserControl
        {
            public Characters()
            {
                InitializeComponent();
                cb_element.DataSource = Enum.GetValues(typeof(Elements));
                cb_level.DataSource = list;
            }
     
            private ArrayList myList = new ArrayList();
     
            public enum Elements
            {
                Moon = 0, Sun = 1, Star = 2, Spirit = 4
            };
     
            public enum Moon
            {
                Moon = 0, Moonlight = 1, Lunar = 2
            };
     
            public enum Sun
            {
                Sun = 0, Sunlight = 1, Solar = 2
            };
     
            public enum Star
            {
                Star = 0, Starlight = 1, Stellar = 2
            };
     
            public enum Spirit
            {
                Spiritual = 0, Twilight = 1, Astral = 2
            };
     
            private void cb_element_SelectedIndexChanged(object sender, EventArgs e)
            {
                    list.Clear();
     
                    switch(cb_element.SelectedIndex)
                    {
                            case 0:
                                list.AddRange(Enum.GetValues(typeof(Moon)));
                            case 1:
                                list.AddRange(Enum.GetValues(typeof(Sun)));
                            case 2:
                                list.AddRange(Enum.GetValues(typeof(Star)));
                            case 3:
                                list.AddRange(Enum.GetValues(typeof(Spirit)));
                    }
            }
        }
    }
    Mon blog sur les technos .NET et Agile -> http://blog.developpez.com/maximepalmisano/

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 114
    Points : 71
    Points
    71
    Par défaut
    C'était bien ç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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
     
    using System;
    using System.Windows.Forms;
     
    namespace MyUserControls
    {
        public partial class Characters : UserControl
        {
            public Characters()
            {
                InitializeComponent();
                cb_element.DataSource = Enum.GetValues(typeof(Elements));
            }
     
            public enum Elements
            {
                Moon = 0, Sun = 1, Star = 2, Spirit = 4
            };
     
            public enum Moon
            {
                Moon = 0, Moonlight = 1, Lunar = 2
            };
     
            public enum Sun
            {
                Sun = 0, Sunlight = 1, Solar = 2
            };
     
            public enum Star
            {
                Star = 0, Starlight = 1, Stellar = 2
            };
     
            public enum Spirit
            {
                Spiritual = 0, Twilight = 1, Astral = 2
            };
     
            private void cb_element_SelectedIndexChanged(object sender, EventArgs e)
            {
     
                switch (cb_element.SelectedIndex)
                {
                    case 0:
                        cb_level.Enabled = true;
                        cb_level.DataSource = Enum.GetValues(typeof(Moon));
                        cb_level.Update();
                        break;
                    case 1:
                        cb_level.Enabled = true;
                        cb_level.DataSource = Enum.GetValues(typeof(Sun));
                        cb_level.Update();
                        break;
                    case 2:
                        cb_level.Enabled = true;
                        cb_level.DataSource = Enum.GetValues(typeof(Star));
                        cb_level.Refresh();
                        break;
                    case 3:
                        cb_level.Enabled = true;
                        cb_level.DataSource = Enum.GetValues(typeof(Spirit));
                        cb_level.Refresh();
                        break;
                    default:
                        cb_level.Enabled = false;
                        cb_level.Refresh();
                        break;
                }
            }
        }
    }
    c'est pas si différent de ce que j'avais fait avec les ifs (pour ne pas dire identique) mais ça marche avec ça. Si je remets ça dans les ifs, il merde à nouveau sur la recharge de la combobox... donc à priori, y'a un truc à creuser là mais je vois pas quoi.

    Par contre le coup du liste ( je l'ai tenté) il aime pas du tout, faudra que je vois pourquoi... ça peut être une solution intéressante à garder sous la main pour des cas de figure où ça aidera !

    Seul bémol : j'ai pas encore trouver comment faire pour vider la combobox et virer son databinding... mais bon, je finirais bien par trouver je suppose.
    S'il n'y a que les imbéciles qui ne changent pas d'avis, mes clients sont des génies.

    Aet, Ukyuu.

  6. #6
    Membre éprouvé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 487
    Points : 945
    Points
    945
    Par défaut
    C'est bizarre, si tu remets les if, il ne marche plus ? As-tu essayé de debug en pas à pas pour voir ce que contenaient tes variables ?

    Ravi de t'avoir aidé, mais j'avoue ne pas vraiment savoir comment
    Mon blog sur les technos .NET et Agile -> http://blog.developpez.com/maximepalmisano/

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 114
    Points : 71
    Points
    71
    Par défaut
    Oui, avec les if, il se remet à ne plus vouloir changer les combos en cascade et moi non plus je sais pas pourquoi.

    Mais vu que le switch case fonctionne, j'utilise le switch case et ça passe nickel.
    S'il n'y a que les imbéciles qui ne changent pas d'avis, mes clients sont des génies.

    Aet, Ukyuu.

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

Discussions similaires

  1. Combox Box + fichier
    Par Panaméen dans le forum C++Builder
    Réponses: 23
    Dernier message: 20/01/2008, 19h52
  2. Ajouter une combox box à une page web
    Par parano dans le forum Web
    Réponses: 0
    Dernier message: 25/11/2007, 18h10
  3. Combox box et recherche
    Par fixfix dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 07/03/2007, 12h34
  4. Pop-up d'une dialog box a partir d'un bouton
    Par bobbyjack dans le forum MFC
    Réponses: 21
    Dernier message: 13/09/2005, 15h32
  5. question sur les message box !
    Par krown dans le forum Langage
    Réponses: 7
    Dernier message: 02/08/2002, 16h11

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