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 :

[CheckedListBox] selection en 1 click


Sujet :

Windows Forms

  1. #1
    Membre éclairé Avatar de max44410
    Étudiant
    Inscrit en
    Juin 2003
    Messages
    426
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2003
    Messages : 426
    Par défaut [CheckedListBox] selection en 1 click
    Bonjour,

    je débute un peu avec .NET et surtout avec VB. j'ai une CheckedListBox avec des elements dedans. jusque la normal.

    Le truc c'est que part défaut il faut d'abord selectionner l'element avant de pouvoir le checker ou le dechecker.

    j'ai en parti resolu le probleme avec l'evenement click :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
       Private Sub CheckedListBox_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles CheckedListBox.Click
     
            If CheckedListBox.GetItemChecked(CheckedListBox.SelectedIndex) Then
                CheckedListBox.SetItemChecked(CheckedListBox.SelectedIndex, False)
            Else
                CheckedListBox.SetItemChecked(CheckedListBox.SelectedIndex, True)
            End If
     
        End Sub
    et avec l'evenement SelectedIndexChange :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub CheckedListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckedListBox.SelectedIndexChanged
     
            If CheckedListBox.GetItemChecked(CheckedListBox.SelectedIndex) Then
                nb_file_to_copy = nb_file_to_copy + 1
            End If
     
            If Not CheckedListBox.GetItemChecked(CheckedListBox.SelectedIndex) Then
                nb_file_to_copy = nb_file_to_copy - 1
            End If
     
            Label1.Text = Str(nb_file_to_copy) + "/" + Str(nb_file_total)
        End Sub
    le souci et je ne sais pas pourquoi, c'est que lorsque je clique sur un element de la liste, il se selectionne, il se decoche ou se coche selon son etat initial. Puis si je reclique sur le meme element (qui est deja selectionné) il ne change pas d'état, par contre le nombre de fichier (variable nb_file_to_copy) se décrémente.

    je ne comprends pas trop... ya surement une logique mais la je suis un peu perdu dans les événements.

    Merci de votre aide

    Maxime

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    ouhla

    un truc à savoir avec .net, il n'y a que très rarement du code à écrire pour des trucs de bas niveau dans le genre

    il y a une propriété CheckOnClick sur cet objet qui fait ce que tu veux faire


    et d'une manière générale, avant de faire quelque chose, regarde bien si ca n'existe pas, on est souvent surpris de tout ce que le framework peut faire
    reflector est d'ailleurs un outils pratique pour chercher ou comprendre le framework
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre éclairé Avatar de max44410
    Étudiant
    Inscrit en
    Juin 2003
    Messages
    426
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2003
    Messages : 426
    Par défaut
    Citation Envoyé par sperot51
    ouhla

    un truc à savoir avec .net, il n'y a que très rarement du code à écrire pour des trucs de bas niveau dans le genre

    il y a une propriété CheckOnClick sur cet objet qui fait ce que tu veux faire


    et d'une manière générale, avant de faire quelque chose, regarde bien si ca n'existe pas, on est souvent surpris de tout ce que le framework peut faire
    reflector est d'ailleurs un outils pratique pour chercher ou comprendre le framework
    desolé dans les événements de mon checkedListBox je n'ai pas d'événement "CheckOnClick". je suis sous VS2005 (.NET2 normalement)

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    je ne parle pas d'évènement mais de propriété
    ton checklistbox posé, tu clic dessus, tu cherches dans les propriétés et checkonclick tu le mets à true

    comme ca sur un click ca coche tout de suite et ca renvoie l'evnement cochage
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre éclairé Avatar de max44410
    Étudiant
    Inscrit en
    Juin 2003
    Messages
    426
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2003
    Messages : 426
    Par défaut
    Citation Envoyé par sperot51
    je ne parle pas d'évènement mais de propriété
    ton checklistbox posé, tu clic dessus, tu cherches dans les propriétés et checkonclick tu le mets à true

    comme ca sur un click ca coche tout de suite et ca renvoie l'evnement cochage
    ok en effet ca fonctionne beaucoup mieux. par contre j'ai toujours cette erreurs d'incrémentation de ma variable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        Private Sub CheckedListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckedListBox.SelectedIndexChanged
     
            If CheckedListBox.GetItemChecked(CheckedListBox.SelectedIndex) Then
                nb_file_to_copy = nb_file_to_copy + 1
            End If
     
            If Not CheckedListBox.GetItemChecked(CheckedListBox.SelectedIndex) Then
                nb_file_to_copy = nb_file_to_copy - 1
            End If
     
            Label1.Text = Str(nb_file_to_copy) + "/" + Str(nb_file_total)
        End Sub
    Lorsque je décoche une case d'un élément qui est déja selectionné, le compteur ne se décrémente pas, par contre si je la coche ca s'incrémente.

    je dois pas être dans le bon événement...

  6. #6
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    oui
    car si on clic en effet la selection change mais si on reclic au meme endroit on est sur la meme selection donc on ne repasse pas dans l'evenement

    utilise l'évenement ItemCheck qui se produit quand un item change d'état de check


    comme il se passe quelque chose qu'on ne comprends pas, il faut débugger, en mettant des points d'arret par exemple
    en mettant un point d'arret sur cet evenement, tu aurais vu que tu ne passais pas dedans et que ce n'était pas le bon
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Membre éclairé Avatar de max44410
    Étudiant
    Inscrit en
    Juin 2003
    Messages
    426
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2003
    Messages : 426
    Par défaut
    Citation Envoyé par sperot51
    oui
    car si on clic en effet la selection change mais si on reclic au meme endroit on est sur la meme selection donc on ne repasse pas dans l'evenement

    utilise l'évenement ItemCheck qui se produit quand un item change d'état de check


    comme il se passe quelque chose qu'on ne comprends pas, il faut débugger, en mettant des points d'arret par exemple
    en mettant un point d'arret sur cet evenement, tu aurais vu que tu ne passais pas dedans et que ce n'était pas le bon
    Merci pour tes conseils. j'ai mis des points d'arret a des endroits strategique de mon programme malheureusement je ne dois pas les mettre au bonne endroit.

    voila mon nouveau souci. lorsque j'ajoute un élément dans ma checkedListBox, je le met par defaut coché grace a cette ligne la :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     CheckedListBox.Items.Add(fichier_info.str_rename + " [" + fichier_info.str_size + " ko]", True)
    mais le truc c'est que dans ma fenetre toutes les cases sont décoché, et cela depuis que j'ai changé d'évènement (itemCheck au lieur de selectIndexChange). voila le code de mon itemCheck :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        Private Sub CheckedListBox_ItemCheck(ByVal sender As Object, ByVal e As System.Windows.Forms.ItemCheckEventArgs) Handles CheckedListBox.ItemCheck
     
            If not CheckedListBox.GetItemChecked(CheckedListBox.SelectedIndex) Then
                nb_file_to_copy = nb_file_to_copy + 1
            Else
                nb_file_to_copy = nb_file_to_copy - 1
            End If
     
            Label1.Text = Str(nb_file_to_copy) + "/" + Str(nb_file_total)
        End Sub
    de plus il décrémentait lorsque je cochais un élément donc j'ai mis un not dans mon if, cependant je ne suis pas la logique ??

    Merci

  8. #8
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    dans les rudiments de .net, voici un truc sympa aussi :

    quand le parametre d'un evenement (e) n'est pas un System.EventArgs
    c'est le cas ici puisque c'est un System.Windows.Forms.ItemCheckEventArgs

    il y a souvent les parametres nécessaire à ce que tu veux faire dans cet evenement dans cet objet

    si tu faias e. il va t'afficher ce qu'il y a de dispo en l'occurence l'index de l'objet cliqué, la nouvelle valeur,l'ancienne valeur etc...

    donc ton code est à revoir du style if e.NewValue ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  9. #9
    Membre éclairé Avatar de max44410
    Étudiant
    Inscrit en
    Juin 2003
    Messages
    426
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2003
    Messages : 426
    Par défaut
    J'ai modifier ce que tu m'as dit. J'ai toujours le meme probleme les cases sont decochées lorsque je lance le programme.

    si je supprime l'evenement itemClick, les cases sont cochées par défaut. Donc ca vient bien de cet événement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub CheckedListBox_ItemCheck(ByVal sender As Object, ByVal e As System.Windows.Forms.ItemCheckEventArgs) Handles CheckedListBox.ItemCheck
     
            If e.NewValue Then
                nb_file_to_copy = nb_file_to_copy + 1
            Else
                nb_file_to_copy = nb_file_to_copy - 1
            End If
     
            Label1.Text = Str(nb_file_to_copy) + "/" + Str(nb_file_total)
        End Sub
    je vais essayer de faire un deboggage... mais c'est pas gagné.

    MErci

  10. #10
    Membre éclairé Avatar de max44410
    Étudiant
    Inscrit en
    Juin 2003
    Messages
    426
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2003
    Messages : 426
    Par défaut
    ok j'ai trouvé. c'est juste que lorque l'on ajoute des éléments dans la liste, il n'y a pas d'index de selectionné, donc il devait y avoir un erreur dans une de mes lignes de code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Private Sub CheckedListBox_ItemCheck(ByVal sender As Object, ByVal e As System.Windows.Forms.ItemCheckEventArgs) Handles CheckedListBox.ItemCheck
    ' je fais un test avant pour etre sur d'avoir un index de selectionné
            If CheckedListBox.SelectedIndex <> -1 Then
                If e.NewValue Then
                    nb_file_to_copy = nb_file_to_copy + 1
                Else
                    new_copyList.Item(CheckedListBox.SelectedIndex) = "none"
                    nb_file_to_copy = nb_file_to_copy - 1
                End If
            End If
     
            Label1.Text = Str(nb_file_to_copy) + "/" + Str(nb_file_total)
        End Sub
    Merci pour ton aide sperot51.
    Et a bientot sur le forum VB.NET

    bonne fin de journéee

  11. #11
    Membre éclairé Avatar de max44410
    Étudiant
    Inscrit en
    Juin 2003
    Messages
    426
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2003
    Messages : 426
    Par défaut
    j'ai une autre question.

    Lorsque je clique sur un élément de ma checkedListBox (élément et non cas à cocher) il me coche la case automatiquement. je ne veux pas qu'il fasse cela.

    Je veux que lorque je clique sur un élément, il le sélectionne (mais qu'il ne coche pas la case) et lorsque je clique sur la check box il check la case et sélectionne la ligne.

    Merci

  12. #12
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    et bien apparement avec cet objet c'est tout ou rien

    ou alors tu ressaies ce que tu voulais faire au début
    mais sur l'évènement click plutot que selectedchange
    comme ca meme si tu clic 2x sur le meme tu as bien 2 evenements
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  13. #13
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 66
    Par défaut
    Récemment j'ai voulu faire la même chose, coché/décoché simplement lorsqu'on click dessus.

    Le problème comme tu dis c'est que lorsque l'élément est déjà séléctioné, et quand click dessu, rien ne se passe.

    Si tu met un point d'arret, tu vois que l'élément se coche, puis se décoche.

    Ce qui est logique. Par defaut il faut cliqué 2x pour coché un élément. Tu click une première fois dessu, ta fonction va le coché. Quand tu désire le décoché avec ta fonction, tu va cliké une 2em fois. Or cette fois-ci, le programme va te le décoché (puisque tu l'aura cliqué 2x) mais comme tu as une fonction qui va le coché si il il est décoché, ben il va te le recoché.

    Voila ^^

    Mais j'ai pas trouvé de solution...Enfin j'ai pas vraiment cherché.

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

Discussions similaires

  1. [MooTools] Mootools <select> sous IE - click Event
    Par dimebagplan dans le forum Bibliothèques & Frameworks
    Réponses: 1
    Dernier message: 11/08/2009, 12h55
  2. [C#] [TreeView] [contextMenu] selection sur un click droit
    Par weejungle dans le forum Windows Forms
    Réponses: 25
    Dernier message: 03/08/2009, 11h52
  3. Select et évènement click
    Par Blowdi dans le forum jQuery
    Réponses: 4
    Dernier message: 22/04/2009, 13h37
  4. Élément SELECT et méthode click() (comment ouvrir une dropdown-list)
    Par Hibou57 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 30/07/2007, 09h38
  5. selection image avec click
    Par Tail dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 02/11/2006, 10h05

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