Ajout de controls combobox à un formulaire au moment de l'exécution

Soyez le premier à donner votre avis sur cette source.

Snippet vu 10 612 fois - Téléchargée 30 fois

Contenu du snippet

Ajout de controls combobox à un formulaire au moment de l'exécution :
Cela sert à ne pas être limiter en nombre de composants sur un formulaire

Source / Exemple :


Public Class clsCBO
    Public Left As Long
    Public Top As Long
    Public Width As Double
    Public Height As Double
    Public Colonne As Long
    Public Ligne As Long
    Public Control As Object
    Public Indice As Long
    Public Nom As String
    Public Const csCBOFontName As String = "Microsoft Sans Serif"
    Public Const csCBOFontSize As Single = 8.25

    Public Sub sbRempliCL(ByVal C As ComboBox, ByVal Ind As Integer, ByVal Lig As Long, _
            ByVal Col As Long)
        Nom = C.Name
        Left = C.Left
        Top = C.Top
        Width = C.Width
        Height = C.Height
        Control = C.Controls
        Indice = Ind
        Ligne = Lig
        Colonne = Col
    End Sub

    'Création de combobox
    Public Sub sbCreateCombo(ByVal Name As String, ByVal X As Integer, ByVal Y As Integer, _
            ByVal W As Integer, ByVal H As Integer)
        Dim FRM As frmGestPlans
        Dim CB As New ComboBox, Lig As Integer

        'Formulaire sur lequel j'insère le combobox
        FRM = gFrmGP.gFormulaireGestPlans
        'Onglet présent sur le formulaire et sur lequel vont s'insérer les controls
        'Si on ne met pas d'onglet on est limité en nombre par les dimensions du formulaire
        With FRM.tabGP.TabPages(0)
            CB.Name = Name
            CB.SetBounds(X, Y, W, H)
            CB.Scale(1)
            CB.Text = ""
            CB.Font = New Font(csCBOFontName, csCBOFontSize, style:=FontStyle.Bold)
            Lig = gFrmGP.fnExtractLigDeControl(Name)
            If Lig Mod 2 <> 0 Then
                CB.BackColor = System.Drawing.Color.PaleTurquoise
            End If
            CB.CreateControl()
            CB.Update()
            .Controls.Add(CB)
            CB.BringToFront()
            CB.Visible = True
            CB.Show()
            CB.Focus()
        End With
    End Sub

    Public Function fnRempliClsCBO(ByVal CBO As ComboBox) As clsCBO
        Dim CL As New clsCBO

        CL.Control = CBO
        CL.Height = CBO.Height
        CL.Left = CBO.Left
        CL.Top = CBO.Top
        CL.Width = CBO.Width
        fnRempliClsCBO = CL
    End Function
End Class

Public Class clsEvents
    Friend WithEvents CBO As ComboBox
    Public Sub sbAddEventsCBO()
        On Error Resume Next
        RemoveHandler CBO.SelectedIndexChanged, AddressOf CBO_SelectedIndexChanged
        AddHandler CBO.SelectedIndexChanged, AddressOf CBO_SelectedIndexChanged
        RemoveHandler CBO.SelectedValueChanged, AddressOf CBO_SelectedValueChanged
        AddHandler CBO.SelectedValueChanged, AddressOf CBO_SelectedValueChanged
        RemoveHandler CBO.TextChanged, AddressOf CBO_TextChanged
        AddHandler CBO.TextChanged, AddressOf CBO_TextChanged
    End Sub
    Public Sub CBO_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CBO.SelectedIndexChanged
        Dim Ligne As Integer, Col As Integer, B As Boolean
        If bEvents Then
            gFrmGP.sbRecupLigCol(CBO.Name, Ligne, Col)
            B = gFrmGP.gLigGestPlans.Item(Ligne).cRevDiffusee.Item(Col).chkRev.Checked
            If B Then
                gFrmGP.gLigGestPlans.Item(Ligne).cRevDiffusee.Item(Col).ADiffuser = CBO.Text
            Else
                gFrmGP.gLigGestPlans.Item(Ligne).cRevDiffusee.Item(Col).DiffActuelle = CBO.Text
            End If
        End If
    End Sub

    Public Sub CBO_SelectedValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CBO.SelectedValueChanged
        Dim Ligne As Integer, Col As Integer, B As Boolean
        If bEvents Then
            gFrmGP.sbRecupLigCol(CBO.Name, Ligne, Col)
            B = gFrmGP.gLigGestPlans.Item(Ligne).cRevDiffusee.Item(Col).chkRev.Checked
            If B Then
                gFrmGP.gLigGestPlans.Item(Ligne).cRevDiffusee.Item(Col).ADiffuser = CBO.Text
            Else
                gFrmGP.gLigGestPlans.Item(Ligne).cRevDiffusee.Item(Col).DiffActuelle = CBO.Text
            End If
        End If
    End Sub

    Public Sub CBO_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CBO.TextChanged
        Dim Ligne As Integer, Col As Integer, B As Boolean
        If bEvents Then
            gFrmGP.sbRecupLigCol(CBO.Name, Ligne, Col)
            B = gFrmGP.gLigGestPlans.Item(Ligne).cRevDiffusee.Item(Col).chkRev.Checked
            If B Then
                gFrmGP.gLigGestPlans.Item(Ligne).cRevDiffusee.Item(Col).ADiffuser = CBO.Text
            Else
                gFrmGP.gLigGestPlans.Item(Ligne).cRevDiffusee.Item(Col).DiffActuelle = CBO.Text
            End If
        End If
    End Sub

End Class

Conclusion :


J'ai pas pris le temps de commenter désoler
ce sera pour la prochaine fois

clsEvents gère les événements

A voir également

Ajouter un commentaire

Commentaires

Messages postés
956
Date d'inscription
lundi 30 mai 2005
Statut
Membre
Dernière intervention
21 août 2014
1
C'est parce que je passe plusieurs fois dans la procedure car les controls sont supprimés puis recréés dans mon programme. C'est un extrait d'un de mes gros programmes... désolé pour les déchets
Messages postés
1018
Date d'inscription
samedi 22 mars 2003
Statut
Membre
Dernière intervention
24 juin 2008

Source intéressante concernant la gestion d'evenements, cependant je n'ai pas vraiment compris pourquoi avoir un Addhandler et un removehandler en même temps, l'un doit en théorie s'opposer à l'autre. Il est vrai que je n'ai pas pris le temps de tout détailler.

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.