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

VB.NET Discussion :

Incrémenter ou décrémenter l'index d'une checkbox dans une CheckedListBox


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 263
    Par défaut Incrémenter ou décrémenter l'index d'une checkbox dans une CheckedListBox
    Bonjour,

    Je voudrai pouvoir changer l'ordre de mes checkbox dans ma CheckedListBox via l'index ou alors grâce à Remove/Insert. Je sais pas comment jouer sur l'index, sinon la solution de Remove/Insert me pose des problemes au niveau de la selection, sa me produit des erreur du type La référence d'objet n'est pas définie à une instance d'un objet.

    Voila mon 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
    15
    16
    17
    18
    19
        Private Sub CheckedListBox1_SelectedIndexChanged_1(sender As System.Object, e As System.EventArgs) Handles CheckedListBox1.SelectedIndexChanged
            If CheckedListBox1.Items.IndexOf(CheckedListBox1.SelectedItem.ToString()).ToString() = "0" Then
                btnMoveUp.Enabled = False
                btnMoveDown.Enabled = True
            ElseIf CheckedListBox1.Items.IndexOf(CheckedListBox1.SelectedItem.ToString()).ToString() = CStr(CheckedListBox1.Items.Count - 1) Then
                btnMoveUp.Enabled = True
                btnMoveDown.Enabled = False
            Else
                btnMoveUp.Enabled = True
                btnMoveDown.Enabled = True
            End If
        End Sub
     
        Private Sub btnMoveDown_Click(sender As System.Object, e As System.EventArgs) Handles btnMoveDown.Click
            Dim Swap As Object = CheckedListBox1.SelectedItem
            btnApply.Enabled = True
            CheckedListBox1.Items.Remove(Swap)
            CheckedListBox1.Items.Insert(CInt(CheckedListBox1.Items.IndexOf(CheckedListBox1.SelectedItem.ToString()).ToString()) + 1, Swap)
        End Sub
    Merci d'avance pour vos suggestions !!

  2. #2
    Membre Expert Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Par défaut
    Je crois qu'il n'y a que le remove/insert comme solution, avec les tests qui vont avec pour éviter les erreurs de référence d'objet non définie blablabla

    Ce qui donne un quelque chose de ce genre :

    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
     
        Private Sub BttnUp_Click(sender As Object, e As EventArgs) Handles BttnUp.Click
     
            Dim nouvelIndex As Integer
     
            If CheckedListBox1.SelectedIndex <> -1 And CheckedListBox1.SelectedIndex <> 0 Then 'On teste qu'au moins un item est sélectionné et que ce ne soit pas le premier de la liste (car il ne peut pas monter d'un cran ...)
     
                nouvelIndex = CheckedListBox1.SelectedIndex - 1 'On définit le nouvel index voulu
     
                CheckedListBox1.Items.Insert(nouvelIndex, CheckedListBox1.SelectedItem) 'On insére l'item séléctionné à l'index voulu
     
                CheckedListBox1.Items.RemoveAt(CheckedListBox1.SelectedIndex) 'On supprime l'ancien doublon
     
                CheckedListBox1.SelectedIndex = nouvelIndex 'On repositionne la séléction sur l'item
     
            End If
        End Sub
     
        Private Sub BttnDown_Click(sender As Object, e As EventArgs) Handles BttnDown.Click
     
            Dim nouvelIndex As Integer
            Dim ObjABouger As Object
     
            If CheckedListBox1.SelectedIndex <> CheckedListBox1.Items.Count - 1 And CheckedListBox1.SelectedIndex <> -1 Then 'On teste qu'au moins un item est sélectionné et que ce ne soit pas le dernier de la liste
     
                nouvelIndex = CheckedListBox1.SelectedIndex + 1 'On définit le nouvel index voulu
     
                ObjABouger = CheckedListBox1.SelectedItem 'On sauvegarde l'item
     
                CheckedListBox1.Items.RemoveAt(CheckedListBox1.SelectedIndex) 'On le supprime
     
                CheckedListBox1.Items.Insert(nouvelIndex, ObjABouger) 'On le ré-insère
     
                CheckedListBox1.SelectedIndex = nouvelIndex 'on repositione la sélection
     
            End If
        End Sub
    Je pense que ce n'est pas la solution la plus optimisé, mais l'idée est là ...

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 263
    Par défaut
    J'ai quasi fait la même chose et j'ai réussi a résoudre le problème de mon Event :

    Voila mon 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
    15
    16
    17
    18
    19
    20
    21
    22
    23
        Private Sub CheckedListBox1_SelectedIndexChanged_1(sender As System.Object, e As System.EventArgs) Handles CheckedListBox1.SelectedIndexChanged
            Dim Index As Integer = CheckedListBox1.SelectedIndex
            If Index = 0 Then
                btnMoveUp.Enabled = False
                btnMoveDown.Enabled = True
            ElseIf Index = CheckedListBox1.Items.Count - 1 Then
                btnMoveUp.Enabled = True
                btnMoveDown.Enabled = False
            Else
                btnMoveUp.Enabled = True
                btnMoveDown.Enabled = True
            End If
        End Sub
     
        Private Sub btnMoveDown_Click(sender As System.Object, e As System.EventArgs) Handles btnMoveDown.Click
            Dim Index As Integer = CheckedListBox1.SelectedIndex
            Dim Swap As Object = CheckedListBox1.SelectedItem
            btnApply.Enabled = True
            CheckedListBox1.Items.Remove(Swap)
            CheckedListBox1.Items.Insert(Index + 1, Swap)
            CheckedListBox1.SelectedIndex = Index + 1
            'CheckedListBox1.SetSelected(Index + 1, True)
        End Sub
    Par contre, quand je déplace ma checkBox sélectionné, si cette checkbox était coché alors il la décoche par défaut et sa fait la même chose avec ton code ^^

  4. #4
    Membre Expert Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Par défaut
    Citation Envoyé par dragondumond Voir le message
    Par contre, quand je déplace ma checkBox sélectionné, si cette checkbox était coché alors il la décoche par défaut et sa fait la même chose avec ton code ^^

    J'ai pas testé ça ...

    A toi de récupérer ça avant l'insert/remove

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Dim ItemChecked As Boolean = CheckedListBox1.GetItemChecked(CheckedListBox1.SelectedIndex)
    Puis après l'insert/remove

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     CheckedListBox1.SetItemChecked(nouvelIndex, ItemChecked)

    Pour avoir au final :

    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
        Private Sub BttnUp_Click(sender As Object, e As EventArgs) Handles BttnUp.Click
     
            Dim nouvelIndex As Integer
            Dim ItemChecked As Boolean = CheckedListBox1.GetItemChecked(CheckedListBox1.SelectedIndex)
     
     
            If CheckedListBox1.SelectedIndex <> -1 And CheckedListBox1.SelectedIndex <> 0 Then 'On teste qu'au moins un item est sélectionné et que ce ne soit pas le premier de la liste (car il ne peut pas monter d'un cran ...)
     
     
                nouvelIndex = CheckedListBox1.SelectedIndex - 1 'On définit le nouvel index voulu
     
                CheckedListBox1.Items.Insert(nouvelIndex, CheckedListBox1.SelectedItem) 'On insére l'item séléctionné à l'index voulu
     
                CheckedListBox1.Items.RemoveAt(CheckedListBox1.SelectedIndex) 'On supprime l'ancien doublon
     
                CheckedListBox1.SelectedIndex = nouvelIndex 'On repositionne la séléction sur l'item
     
                CheckedListBox1.SetItemChecked(nouvelIndex, ItemChecked)
     
            End If
        End Sub

  5. #5
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 263
    Par défaut
    Solution au probleme précédent :

    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
        Private Sub btnMoveDown_Click(sender As System.Object, e As System.EventArgs) Handles btnMoveDown.Click
            Dim ObjABouger As Object
            Dim nouvelIndex As Integer
            If CheckedListBox1.SelectedIndex <> CheckedListBox1.Items.Count - 1 And CheckedListBox1.SelectedIndex <> -1 Then 'On teste qu'au moins un item est sélectionné et que ce ne soit pas le dernier de la liste
                If CheckedListBox1.GetItemCheckState(CheckedListBox1.SelectedIndex).ToString() = "Checked" Then
                    nouvelIndex = CheckedListBox1.SelectedIndex + 1 'On définit le nouvel index voulu
                    ObjABouger = CheckedListBox1.SelectedItem 'On sauvegarde l'item
                    CheckedListBox1.Items.RemoveAt(CheckedListBox1.SelectedIndex) 'On le supprime
                    CheckedListBox1.Items.Insert(nouvelIndex, ObjABouger) 'On le ré-insère
                    CheckedListBox1.SelectedIndex = nouvelIndex 'on repositione la sélection
                    CheckedListBox1.SetItemCheckState(nouvelIndex, CheckState.Checked)
                Else
                    nouvelIndex = CheckedListBox1.SelectedIndex + 1 'On définit le nouvel index voulu
                    ObjABouger = CheckedListBox1.SelectedItem 'On sauvegarde l'item
                    CheckedListBox1.Items.RemoveAt(CheckedListBox1.SelectedIndex) 'On le supprime
                    CheckedListBox1.Items.Insert(nouvelIndex, ObjABouger) 'On le ré-insère
                    CheckedListBox1.SelectedIndex = nouvelIndex 'on repositione la sélection
                    CheckedListBox1.SetItemCheckState(nouvelIndex, CheckState.Unchecked)
                End If
            End If
        End Sub
    Je l'ai adapter sur ton code uniquement sur le bouton down pour l'instant mais je pense qu'il est possible de mieux faire.

  6. #6
    Membre Expert Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Par défaut
    J'ai édité mon post précédent

    Si dans ton cas ta CheckedListBox ne laisse comme choix que Check ou pas Check, tu peux privilégier GetItemChecked plutôt que GetItemCheckState avec le test en dur = "Checked"

  7. #7
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 263
    Par défaut
    J'ai pris ta solution qui parais plus logique, merci beaucoup pour ton aide et le boulot que vous apporté tous les jours ^^

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 25/03/2011, 18h29
  2. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  3. [POO] dans une classe, appeler une fonction dans une méthode
    Par arnaudperfect dans le forum Langage
    Réponses: 3
    Dernier message: 26/08/2007, 23h04
  4. Envoyer une formulaire dans une page dans une Frame
    Par zooffy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 29/06/2007, 10h13
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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