lundi 22 octobre 2012

Comment utiliser une Listbox dans VB.NET

Comment utiliser une Listbox dans VB.NET


Ajouter le Listbox dans un formulaire. Décider de sa superficie en traçant un rectangle. Normalement, la Listbox s’appellera ListBox1.


ListBox dans Visual Basic

Ensuite, dans le code, on ajuste les propriétés. Je choisis de le faire au démarrage du formulaire. Vous pouvez aussi faire la même chose. J’ai utilisé la commande With pour faire différent (ça modifie que la présentation).



Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        With ListBox1
            .Enabled = True 'if the listox is enable or disabled
            .Sorted = True ' if you want ti list sorted
            .BorderStyle = BorderStyle.Fixed3D ' the border style
            .Visible = True
            .ScrollAlwaysVisible = True 'presence of scroll all time
            .MultiColumn = False 'add a new column if number of items reach max height
        End With

        ListBox1.Items.Add("allo1")
        ListBox1.Items.Add("allo2")
        ListBox1.Items.Add("allo3")
        ListBox1.Items.Add("allo4")
        ListBox1.Items.Add("allo5")
        ListBox1.Items.Add("allo1")
        ListBox1.Items.Add("allo2")
        ListBox1.Items.Add("allo3")
        ListBox1.Items.Add("allo4")
        ListBox1.Items.Add("allo5")
        ListBox1.Items.Add("allo1")
        ListBox1.Items.Add("allo2")
        ListBox1.Items.Add("allo3")
        ListBox1.Items.Add("allo4")
        ListBox1.Items.Add("allo5")

    End Sub

La ListBox est trié alphabétiquement. Les mots « allo1 » seront regroupés ensemble en premier, les « allo2 » suivront ensuite. Ça va fonctionner si tu ajouter des chaînes de caractères String.

Si vous lancer le code maintenant, vous allez remarquer la ListBox1 renseignée avec aucune sélection initiale. Cette présentation de la ListBox convient dans la majorité des cas.

Exemple de ListBox dans Visual Basic

Autrement, si vous voulez que la ListBox1 ait une sélection de départ, vous pouvez utiliser les propriétés SelectedIndex ou SelectedItem.

Soyez averti, les index peuvent changer à chaque fois que vous ajouter ou retirer un élément de la ListBox. C’est aussi de même si vous décider de trier une Listbox qui n’est pas triée. Alors, vous ne pouvez pas vous fier à la propriété SelectedIndex pour obtenir le résultat d’une sélection.



        ListBox1.SelectedIndex = 2 '0 is the first one, 2 is the third.





Vous pouvez utiliser SelectedItem pour obtenir la chaîne de caractères String listé dans la ListBox. Encore une fois, la chaîne de caractère String n’est pas nécessairement unique. Il faut être prudent pour que ne pas que votre programme réagisse incorrectement suivant le choix de son utilisateur. Remarquer aussi qu’en cas de doublons de String, le programme sélection toujours le premier rencontré dans la liste.




        ListBox1.SelectedItem = "allo3" 'will always select the first he encounter





On peut aussi agrémenter la sélection des items dans la ListBox1 en utilisation la propriété SelectionMode.


        ListBox1.SelectionMode = SelectionMode.MultiSimple 'no need to use shift or ctrl, only space or left-click
        ListBox1.SelectionMode = SelectionMode.MultiExtended  'no need to use shift or ctrl with left-click


Lorsque SelectionMode est égale à SelectionMode.MultiSimple, alors l’utilisateur n’aura qu’à utiliser la bouton de la souris pour sélectionner ou désélectionner des items de la ListBox1.

Lorsque SelectionMode est égale à SelectionMode.MultiExtended, l’utilisateur doit utiliser les touches CTRL ou MAJ (SHIFT) pour sélectionner ou désélectionner les items de la ListBox1.

C’est assez simple avec l’aide de Visual Basic Express 2010 ou avec Visual Studio 2010. Ouvrez votre  form1.vb [Design]. Double-cliquer la ListBox1. Vous devriez obtenir quelque chose le code suivant :



    Private Sub ListBox1_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ListBox1.SelectedIndexChanged



    End Sub



Maintenant, mettez un MsgBox à l’intérieur de la fonction et faite afficher par exemple SelectedIndex.


    Private Sub ListBox1_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ListBox1.SelectedIndexChanged

        MsgBox(ListBox1.SelectedIndex)

    End Sub


Alors, lorsque vous changer la sélection dans la ListBox1, un message apparaît à l’écran et indique le numéro d’index de votre sélection.

Votre code devrait avoir l’air de ceci :



Public Class Form1
   
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        With ListBox1
            .Enabled = True 'if the listox is enable or disabled
            .Sorted = True ' if you want ti list sorted
            .BorderStyle = BorderStyle.Fixed3D ' the border style
            .Visible = True
            .ScrollAlwaysVisible = True 'presence of scroll all time
            .MultiColumn = False 'add a new column if number of items reach max height
        End With

        ListBox1.Items.Add("allo1")
        ListBox1.Items.Add("allo2")
        ListBox1.Items.Add("allo3")
        ListBox1.Items.Add("allo4")
        ListBox1.Items.Add("allo5")
        ListBox1.Items.Add("allo1")
        ListBox1.Items.Add("allo2")
        ListBox1.Items.Add("allo3")
        ListBox1.Items.Add("allo4")
        ListBox1.Items.Add("allo5")
        ListBox1.Items.Add("allo1")
        ListBox1.Items.Add("allo2")
        ListBox1.Items.Add("allo3")
        ListBox1.Items.Add("allo4")
        ListBox1.Items.Add("allo5")


        ListBox1.SelectedIndex = 2 '0 is the first one, 2 is the third.
        ListBox1.SelectedItem = "allo3" 'will always select the first he encounter

        ListBox1.SelectionMode = SelectionMode.MultiSimple 'no need to use shift or ctrl, only space or left-click
        ListBox1.SelectionMode = SelectionMode.MultiExtended  'no need to use shift or ctrl with left-click

    End Sub
    Private Sub ListBox1_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ListBox1.SelectedIndexChanged

        MsgBox(ListBox1.SelectedIndex)



    End Sub


End Class




Il existe une petite faiblesse dans le code. Lorsque vous démarrez le programme tel qu’il est le MsgBox est lancé avant que le formulaire soit complètement chargé. Ce n’est pas très sexy. Nous pouvons rendre le code un peu plus intelligent en plaçant une condition dans la fonction d’événement.



Comment enlever le Msgbox au chargement du formulaire?

Vous devez avoir 4 choses pour render votre code plus intelligent.

1- Une condition avec un vrai ou faux dans la fonction d’événements
2- Une fonction qui modifie la variable
3- Déclarer la variable et render accessible aux 2 fonctions
4- Initialiser la variable

Pardonnez-moi si ce n’est pas clair. Peut-être avec l’exemple qui suit vous aidera.

La condition:


Vous avez besoin d’une condition ou n’importe quoi pour empêcher votre programme d’exécuter le MsgBox. Ne nous compliquons pas la vie, utilisons la fonction if.


    Private Sub ListBox1_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ListBox1.SelectedIndexChanged

        If form_onShow = True Then
            'MsgBox(ListBox1.SelectedItem.ToString)
            MsgBox(ListBox1.SelectedIndex)

        End If
        MsgBox(ListBox1.SelectedItem.ToString)
    End Sub


Si la variable Form_onShow  est vraie, alors le formulaire est prêt à fonctionner, sinon, rien ne va se passer.


Une fonction qui faire changer la variable:


Le formulaire active une fonction lorsque le ce dernier a terminé de charger. Cette fonction est OnShown. C’est une fonction quelque peut invisible dans Visual Basic. Utilisez-le.

Voici l’exemple de code :


    Protected Overrides Sub OnShown(e As System.EventArgs)
        MyBase.OnShown(e)
        form_onShow = True
    End Sub



Le mieux est de faire un copie-coller du code. Il y aura en masse d’Occassions pour poser des questions. L’essentielle est de  comprendre que la fonction OnShown est lancée lorsque la fonction a terminé d’être chargé et que la variable form_OnSown va changer à vrai.

Une variable disponible pour les 2 fonctions:


Toutes les variables doivent être déclarées sinon, le logiciel ne pourrait pas savoir de quoi il a affaire. Je suggère de placer la variable dans la classe form et à l’extérieur des fonctions.


Public Class Form1

    Private form_onShow As Boolean 'variable member of Form1

    Protected Overrides Sub OnShown(e As System.EventArgs)
        MyBase.OnShown(e)
        form_onShow = True
    End Sub



Initialiser la variable:


Finalement, vous devez mettre une valeur initiale à votre variable et vous devez le mettre dans la fonction New. La fonction New est comme la fonction OnShown, elle n’apparaît pas par défaut et elle est comme cachée.  Alors vous devez la chercher. Je vous invite à copier et coller le code que j’ai écrit dans les pages qui suivent. Collez-le dans votre Visual Basic Express 2012 ou Visual Studio 2012 (ou n’importe quelle édition).


    Public Sub New()

        ' This call is required by the designer.
        InitializeComponent()

        ' Add any initialization after the InitializeComponent() call.
        form_onShow = False
    End Sub


Finalement, voici de quoi aurait l’air votre code (sans gestions d’erreurs) :


Public Class Form1

    Private form_onShow As Boolean 'variable member of Form1

    Public Sub New()

        ' This call is required by the designer.
        InitializeComponent()

        ' Add any initialization after the InitializeComponent() call.
        form_onShow = False
    End Sub


    Protected Overrides Sub OnShown(e As System.EventArgs)
        MyBase.OnShown(e)
        form_onShow = True
    End Sub

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        With ListBox1
            .Enabled = True 'if the listox is enable or disabled
            .Sorted = True ' if you want ti list sorted
            .BorderStyle = BorderStyle.Fixed3D ' the border style
            .Visible = True
            .ScrollAlwaysVisible = True 'presence of scroll all time
            .MultiColumn = False 'add a new column if number of items reach max height
        End With

        ListBox1.Items.Add("allo1")
        ListBox1.Items.Add("allo2")
        ListBox1.Items.Add("allo3")
        ListBox1.Items.Add("allo4")
        ListBox1.Items.Add("allo5")
        ListBox1.Items.Add("allo1")
        ListBox1.Items.Add("allo2")
        ListBox1.Items.Add("allo3")
        ListBox1.Items.Add("allo4")
        ListBox1.Items.Add("allo5")
        ListBox1.Items.Add("allo1")
        ListBox1.Items.Add("allo2")
        ListBox1.Items.Add("allo3")
        ListBox1.Items.Add("allo4")
        ListBox1.Items.Add("allo5")


        ListBox1.SelectedIndex = 2 '0 is the first one, 2 is the third.
        ListBox1.SelectedItem = "allo3" 'will always select the first he encounter

        ListBox1.SelectionMode = SelectionMode.MultiSimple 'no need to use shift or ctrl, only space or left-click
        ListBox1.SelectionMode = SelectionMode.MultiExtended  'no need to use shift or ctrl with left-click

    End Sub
    Private Sub ListBox1_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ListBox1.SelectedIndexChanged

        If form_onShow = True Then
            'MsgBox(ListBox1.SelectedItem.ToString)
            MsgBox(ListBox1.SelectedIndex)

        End If
        MsgBox(ListBox1.SelectedItem.ToString)
    End Sub


End Class





Référence :

Information sur MSDN : http://msdn.microsoft.com/en-us/library/system.windows.forms.listbox.aspx

Site web de Check Technologies : http://checktechno.ca


Procurer vous la même version de Visual Studio que le mien sur Amazon: Visual Studio 2010 Professional (Old Version)

Aucun commentaire:

Enregistrer un commentaire