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

Windows Forms Discussion :

[VB2005] CheckedListBox : ne pouvoir choisir qu'un seul élément !


Sujet :

Windows Forms

  1. #1
    Membre expert
    Avatar de khany
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 073
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 073
    Points : 3 890
    Points
    3 890
    Par défaut [VB2005] CheckedListBox : ne pouvoir choisir qu'un seul élément !
    Bonjour !
    Je sais, c'est tordu allez-vous dire car la CheckedListBox est justement faite pour choisir plusieurs éléments et une ListBox ferait mieux l'affaire.
    Tout à fait d'accord mais je trouve le look de la CheckedListBox beaucoup plus beau de part la case à cocher qui montre bien à l'utilisateur ce qu'il a choisi.
    Donc, je voudrais que l'utilisateur ne puisse faire qu'un seul choix.
    J'ai tenté le .enabled = false dès qu'un choix est fait mais alors ... quid si l'utilisateur s'est trompé et veut modifier son choix. Un bouton "Corriger" qui remet le .enabled = true, cela fait un peu racommodage et programmation joujou
    L'option "Flags" m'a aussi titillée mais j'ai plusieurs CheckedListBox et cela devient difficile à gérer.

    D'autres idées, pistes, suggestions, un événement qui m'aurait échappé ?

    D'avance, merci
    avant de poster FAQ VB - Page sources VB - Cours VB

    Mes tutoriels : VB - VB.NET et ASP.NET

    N'oubliez pas Merci !

  2. #2
    Membre régulier
    Développeur .NET
    Inscrit en
    Juin 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2007
    Messages : 77
    Points : 89
    Points
    89
    Par défaut
    bonjour,

    je crois que la propriété SelectionMode permet de ne choisir qu'un élément à la fois en lui donnant la valeur "One"

  3. #3
    Membre expert
    Avatar de khany
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 073
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 073
    Points : 3 890
    Points
    3 890
    Par défaut
    J'ai testé mais je peux cocher plusieurs cases
    Du moins, je vois les coches des cases cliquées checkées, ce qui n'est pas le but.
    avant de poster FAQ VB - Page sources VB - Cours VB

    Mes tutoriels : VB - VB.NET et ASP.NET

    N'oubliez pas Merci !

  4. #4
    Membre régulier
    Développeur .NET
    Inscrit en
    Juin 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2007
    Messages : 77
    Points : 89
    Points
    89
    Par défaut
    j'ai bien fait de mettre "je crois"

    désolé je ne vois pas comment faire. A part en utilisant une listbox simple...

  5. #5
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Je pense avoir une solution à proposer. Je suis sous VS2003 mais ça doit marcher aussi sous les autres versions.

    J'ai mis la propriété CheckOnClick à True. (je pense que c'est important)

    Il y a 2 "philosophies" possible.

    1 : Quand l'utilisateur a déjà coché une case, il doit d'abord la décocher pour en cocher une autre.

    2 : Quand l'utilisateur a déjà coché une case, s'il en coche une 2e, la 1e est décochée.

    1e approche.
    Dans l'évènement SelectedIndexChanged de la CheckedListBox, j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    If MaCheckedListBox.CheckedIndices <> 1 Then
        MaCheckedListBox.SetItemChecked(MaCheckedListBox.SelectedIndex, False)
    End if
    2e approche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    If MaCheckedListBox.CheckedIndices <> 1 Then
        For i as Integer to MaCheckedListBox.Items.Count - 1
            If MaCheckedListBox.GetItemCheckState(i) And Not (i = MaCheckedListBox.SelectedIndex) Then
                MaCheckedListBox.SetItemChecked(i, False)
            End If
        Next 
    End If
    Voilà, avec ça, chez moi ça fonctionne.

    Griftou.
    Kropernic

  6. #6
    Membre expert
    Avatar de khany
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 073
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 073
    Points : 3 890
    Points
    3 890
    Par défaut
    Très bonne ton idée, je vais tester
    et, j'avais oublié de le préciser, la propriété CheckOnClick est bien à True !
    avant de poster FAQ VB - Page sources VB - Cours VB

    Mes tutoriels : VB - VB.NET et ASP.NET

    N'oubliez pas Merci !

  7. #7
    Membre expert
    Avatar de khany
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 073
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 073
    Points : 3 890
    Points
    3 890
    Par défaut
    Bon, je suis partie de l'excellente idée de griftou et je suis arrivée à une solution assez simple finalement.
    Petite précision, l'instruction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    If MaCheckedListBox.CheckedIndices <> 1 Then
    donnée par griftou est refusée en VB 2005.

    Mais ceci fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
                Dim indexA As Integer = MaCheckedListBox.SelectedIndex
                For i As Integer = 0 To Me.MaCheckedListBox.Items.Count - 1
                    Me.MaCheckedListBox.SetItemChecked(i, False)
                Next
                Me.MaCheckedListBox.SetItemChecked(indexA, True)
    N'essayez pas d'utiliser la méthode ClearSelected, elle ne fonctionne pas sur une collection. Je l'ai pas inventé, je viens de le lire dans l'aide en ligne.

    Merci pour l'idée de départ
    avant de poster FAQ VB - Page sources VB - Cours VB

    Mes tutoriels : VB - VB.NET et ASP.NET

    N'oubliez pas Merci !

  8. #8
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Il donne quoi comme erreur sur l'instruction qui ne passe pas ?

    Ca m'a toujours intrigué les différences de ce genre entre différentes versions.

    Griftou.
    Kropernic

  9. #9
    Membre expert
    Avatar de khany
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 073
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 073
    Points : 3 890
    Points
    3 890
    Par défaut
    Par coeur, je ne sais plus, faudrait que je retape les lignes
    mais c'est la comparaison <> (et même =) à un integer qui est refusée.
    Si j'ai le temps, je retaperai la ligne pour dire le message exact
    avant de poster FAQ VB - Page sources VB - Cours VB

    Mes tutoriels : VB - VB.NET et ASP.NET

    N'oubliez pas Merci !

  10. #10
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Ok. Suis déjà content d'avoir pu être utile.

    Griftou.
    Kropernic

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 12/01/2012, 20h56
  2. [AC-2003] Ne pouvoir créer qu'un seul enregistrement à la date du jour
    Par lucas-18 dans le forum IHM
    Réponses: 16
    Dernier message: 03/03/2011, 20h19
  3. Pouvoir choisir une adresse différent pour réponse
    Par DomiM dans le forum Exchange Server
    Réponses: 2
    Dernier message: 19/05/2010, 13h18
  4. [Evolution] Utilité de pouvoir choisir la base
    Par Baptiste Wicht dans le forum Utilities
    Réponses: 6
    Dernier message: 27/11/2007, 19h31
  5. SELECT d'un seul élément
    Par Siteac dans le forum Requêtes
    Réponses: 1
    Dernier message: 06/11/2006, 22h17

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