Ajouter controles dynamiquement en vb.net


Description

Ce code permet d'ajouter n'importe quel objet a votre form et d'en definir ses evenements.
J'ai mis deux exemples bidons avec buttons et textboxs.

Si vous ne téléchargez pas le zip, ajoutez simplement trois bouttons (qui garderont leurs noms d'origine) et un label nommé Label... touts 4 placés de preference en bas d'une form assez large.

Source / Exemple :


Private nbrbtn As Integer = 0 'variable qui nous servira de compteur pour les bouttons
    Private nbrtxt As Integer = 0 'variable qui nous servira de compteur pour les textbox

    'CREER BOUTTONS :

   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim nvxbtn As New Button()
        'on definie les proprietés du nouveaux boutton :
        '----------------------------------------------------
        nvxbtn.Name = "NewButton" + (nbrbtn + 1).ToString() 'defini le nom du boutton
        nvxbtn.Text = "NewButton" + (nbrbtn + 1).ToString() 'defini le text du boutton
        nvxbtn.Width = 100 'on definit la taille horizontale du boutton
        nvxbtn.Height = 20 'on definit la taille verticale du boutton
        nvxbtn.Top = nbrbtn * nvxbtn.Height 'on multiplie le compteur par la proprieté Height du boutton pour definir la position verticale et que les bouttons ne soit pas superposés
        nvxbtn.Left = 0 'je met et garde tjrs la valeur à 0 pour aligner horizontalement les bouttons
        '-----------------------------------------------------
        Controls.Add(nvxbtn)  ' Ajoute le controle à la collection
        AddHandler nvxbtn.Click, AddressOf nvbtnHandler_Click  ' ajoute l'evenement myButtonHandler_Click au controle
        nbrbtn += 1 'on incremente le compteur de 1
    End Sub

    Private Sub nvbtnHandler_Click(ByVal sender As Object, ByVal e As EventArgs)
        'affiche le nom du boutton qui a été cliqué
        MsgBox(CType(sender, Button).Text + " a été cliqué")
    End Sub

    'CREER TEXTBOXS : 

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim nvxtxt As New TextBox()
        'on definie les proprietés du nouveaux boutton :
        '----------------------------------------------------
        nvxtxt.Name = "NewText" + (nbrtxt + 1).ToString() 'defini le nom du text
        nvxtxt.Text = "" 'defini la valeur du textbox vide
        nvxtxt.Width = 50 'on defini la taille horizontale du textbox
        nvxtxt.Height = 20 'on defini la taille verticale du textbox
        nvxtxt.Top = 150 'je met et garde tjrs la valeur à 150 pour aligner verticalement les textbox
        nvxtxt.Left = nbrtxt * nvxtxt.Width 'on multiplie le compteur par la proprieté Width du textbox pour definir la position verticale et que les textbox ne soit pas superposés
        '-----------------------------------------------------
        Controls.Add(nvxtxt)  ' Ajoute le controle à la collection
        AddHandler nvxtxt.TextChanged, AddressOf nvtxtHandler_TextChanged  ' ajoute l'evenement nvtxtHandler_TextChanged au controle
        nbrtxt += 1 'on incremente le compteur de 1
    End Sub

    Private Sub nvtxtHandler_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
        'affiche dans le Label le nom du textbox et sa valeur lorsque un utilisateur tappe du texte
        Label.Text = CType(sender, TextBox).Name & " : " & CType(sender, TextBox).Text
    End Sub

    'Suppression / Réinitialisation
    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        'on reinitialise tout ! :

        nbrbtn = 0 'on reinitialise nbrbtn
        nbrtxt = 0 'on reinitialise nbrxt
        Controls.Clear() 'on supprime tous les controles
        InitializeComponent() 'on replace les controles d'origine
        Show() 'on montre à nouveau la feuille

    End Sub

Conclusion :


Voila, en esperant que cela puisse servir.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.