Selection item checkedlistbox

Tiidess Messages postés 21 Date d'inscription lundi 10 novembre 2008 Statut Membre Dernière intervention 20 janvier 2010 - 20 janv. 2010 à 18:39
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 - 20 janv. 2010 à 22:39
Bonjour,
j'ai un probleme concernant la checkedlistbox.
Je veux limiter mes selections d'item dans celle-ci.
Cependant, j'ai un probleme.

voici mon code :
Private Sub CheckedListBox1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles CheckedListBox1.Click
        Dim lim As Integer

        lim = CheckedListBox1.CheckedItems.Count

        Label1.Text = lim
End Sub



Ma variable Lim compte les elements validés dans la checkedlistbox.
Pour mon programme, j'utiliserai ensuite la variable lim pour limiter les selection (mais la n'est pa le probleme !!!!)
En effet, en affichant lim dans le label, je me suis apercu qu'il y avait un decalage entre ce que je selectionne et la valeur affiché !

je m'explique .. lorsque je selectionne 2 items : il affichera 1.
si j'en selectionne un 3eme.. il affichera 2 ..
si j'en deselectionne 1 .. il m'affiche 3
puis en deselectionner un autre .. il maffiche 2 ..

il compte donc les elements selectionnés mais il me renvoie la valeur de l'evenement anterieur.. pourquoi donc ?

14 réponses

mdevaux62 Messages postés 111 Date d'inscription dimanche 24 décembre 2000 Statut Membre Dernière intervention 17 novembre 2012 7
20 janv. 2010 à 18:48
Bonjour,
Pourquoi ne pas utiliser l'évènement SelectedIndexChanged ?

    Private Sub CheckedListBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles CheckedListBox1.SelectedIndexChanged
        Dim a As Integer = CheckedListBox1.CheckedItems.Count
    End Sub
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
20 janv. 2010 à 18:56
salut,

pourquoi au click? c'est au CHECK qu'il faut vérifier, non?

et l'évènement est pris en compte juste après, il faut donc varier selon la dernière action :

    Private Sub CheckedListBox1_ItemCheck(ByVal sender As Object, ByVal e As System.Windows.Forms.ItemCheckEventArgs) Handles CheckedListBox1.ItemCheck
        Dim lim As Integer

        lim = CheckedListBox1.CheckedItems.Count

        'le check présent n'est pas encore comptabilisé avant la sortie de la sub (puisqu'on peut l'annuler)
        If e.CurrentValue = CheckState.Checked Then lim -= 1 Else lim += 1

        Me.Text = lim.ToString

    End Sub


çà correspond?
++
[hr]
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
20 janv. 2010 à 18:57
mdevaux62 -> changer la sélection ne change pas forcément la coche ;)
0
mdevaux62 Messages postés 111 Date d'inscription dimanche 24 décembre 2000 Statut Membre Dernière intervention 17 novembre 2012 7
20 janv. 2010 à 19:01
Oups ! C'est exact.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Tiidess Messages postés 21 Date d'inscription lundi 10 novembre 2008 Statut Membre Dernière intervention 20 janvier 2010
20 janv. 2010 à 19:02
j'ai essayer l'evenement itemchek ou clik ..
cela fait la meme chose ..
de plus, ton code effectue la meme chose que le mien ..
il y a toujours un decalage et je n'arrive pas a comprendre pourquoi !
0
Tiidess Messages postés 21 Date d'inscription lundi 10 novembre 2008 Statut Membre Dernière intervention 20 janvier 2010
20 janv. 2010 à 19:09
l'evenement selected Index change ne marche pas non plus !!
desolé mdevaux62 !!
j'ai essayer tout les evenements qui pourrait correspondre sur la checkedlistbox mais il se passe toujours la meme chose.
Le probleme est il l'evenement ou alors est-ce un probleme au niveau du calcul ?

Car le calcul se produit mais pourquoi ma variable lim affiche la valeur d'avant du calcul d'avant ..?
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
20 janv. 2010 à 19:19
tu peux aussi lire toutes les réponses hein....

je t'ai répondu il y a 25mn
0
Tiidess Messages postés 21 Date d'inscription lundi 10 novembre 2008 Statut Membre Dernière intervention 20 janvier 2010
20 janv. 2010 à 19:29
lol
desolé de pas avoir repondu directement a ton post mais je l'ai essayer aussi ..
et il se produit toujours la meme chose avec le tien comme celui de mdevaux62 ....
tres bizar =s
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
20 janv. 2010 à 19:39
juste chez toi alors ?...
tu as du laisser ton code et lire le label, alors que j'ai mis l'affichage dans le titre de la form
0
Tiidess Messages postés 21 Date d'inscription lundi 10 novembre 2008 Statut Membre Dernière intervention 20 janvier 2010
20 janv. 2010 à 19:45
nan j'ai tout simplement changer ton code ..
au lieu de le mettre dans le titre de la page .. je l'ai mis dans le label
mais le resultat est le meme qu'auparavant ...
le label affiche toujours avec une selection de decalage ..
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
20 janv. 2010 à 19:53
bon donc on fait quoi, aux lecteurs de continuer à tenter de deviner jusqu'à ce que tu dises "ah oui çà marche"?

le code donné fonctionne chez moi.
pas chez toi.

chez moi control par défaut, aucun code pour altérer

tu as posé une nouvelle box dans un nouveau projet pour tester ?
tu as changé des propriétés de ta checklist?
etc?...

suffit pas de croiser les bras. tu demandes de l'aide, toutes ces informations auraient dûes déjà être données dès l'énoncé! ce n'est pas à nous d'aller à la chasse aux informations
0
Tiidess Messages postés 21 Date d'inscription lundi 10 novembre 2008 Statut Membre Dernière intervention 20 janvier 2010
20 janv. 2010 à 20:10
Pas la peine de vous enervez ...
oui je demande de l'aide .. c'est un peu le but de ce forum non ?
contrairement à d'autres personnes, je me suis penché sur le sujet et j'ai fait beaucoup de recherche au prealable ...
je ne suis pas venu dire simplement .. "Comment faire? donner moi un code!"

si vous lisez ce que j'ecris et ce que je repond, j'essaye de trouver un raisonnement et j'essaye de cerner le probleme plus que le resoudre en lui meme..

Chez vous il fonctionne peut etre, mais ce n'est pas le cas chez moi.. Pourquoi je sais pas...?! et comment suis-je censé le savoir ?
Si je savais pourquoi ca ne marchait pas .. je ne serais pas venu vous voir !!
0
mdevaux62 Messages postés 111 Date d'inscription dimanche 24 décembre 2000 Statut Membre Dernière intervention 17 novembre 2012 7
20 janv. 2010 à 20:29
Tiidess a raison. Il ya un décalage avec l'évènement itemchecked.
Ca marche par contre impec avec mouseup :

Public Class Form1

    Private WithEvents chkListBox As CheckedListBox
    Private lblCount As Label

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim chaine() As String = "elt1-elt2-elt3-elt4-elt5".Split("-")
        chkListBox = New CheckedListBox
        With chkListBox
            .Location = New Point(10, 10)
            .Size = New Size(300, 100)
            .Items.AddRange(chaine)
        End With
        lblCount = New Label
        With lblCount
            .Location = New Point(10, 150)
            .Text = chkListBox.CheckedItems.Count
        End With
        Me.Controls.Add(chkListBox)
        Me.Controls.Add(lblCount)
    End Sub

    Private Sub chkListBox_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles chkListBox.MouseUp
        lblCount.Text = chkListBox.CheckedItems.Count.ToString
        lblCount.Refresh()
    End Sub

End Class
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
20 janv. 2010 à 22:39
je n'ai pas dit qu'il n'y avait pas de décalage, juste que le _itemcheck me semblait plus logique, et que le décalage pouvait être rectifié par :

If e.CurrentValue = CheckState.Checked Then lim -= 1 Else lim += 1

ce qui fonctionne chez moi (true comme false à '.CheckOnClick')
0
Rejoignez-nous