Ajouter controles dynamiquement en vb.net

Soyez le premier à donner votre avis sur cette source.

Vue 11 936 fois - Téléchargée 979 fois


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

Ajouter un commentaire

Commentaires

Dmikael
Messages postés
3
Date d'inscription
mardi 7 avril 2009
Statut
Membre
Dernière intervention
15 mai 2009
-
Salut, cette source est trés bien mais y'a t'il moyen de sauver l'état de la form modifiée ???
gbonamy
Messages postés
6
Date d'inscription
vendredi 18 juin 2004
Statut
Membre
Dernière intervention
18 mars 2013
-
Super exemple très compréhensible.
Grand merci
swan94
Messages postés
255
Date d'inscription
jeudi 29 juillet 2004
Statut
Membre
Dernière intervention
2 avril 2010
-
Merci très utile.
J'ai une question :
Comment pouvoir faire une boucle ? :

For i = 1 to 5
... 'Afficher un textbox à chaque fois
Next i

Merci
cs_lerak
Messages postés
6
Date d'inscription
dimanche 10 novembre 2002
Statut
Membre
Dernière intervention
20 mars 2006
-
Et j'ajouterais que même pour Visual 2005, il ne suffit que de quelques correction de syntaxe au moment de la création de l'objet pour que celà puisse fonctionner parfaitement
Merci
reno184
Messages postés
1
Date d'inscription
vendredi 5 novembre 2004
Statut
Membre
Dernière intervention
31 mai 2005
-
Super code ! très clair !

En revanche sais-tu faire apparaitre dans le label l'evenement utilisé ???

Par exemple si je fais button.lostfocus j'aimerais voir apparaitre automatiquement "lostfocus" écrit dans le label

merci


renaud

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.