Creation de controls dynamique + deplacement et redimention pour l'user

Soyez le premier à donner votre avis sur cette source.

Snippet vu 7 865 fois - Téléchargée 21 fois

Contenu du snippet

vb 2008 express
un simple exemple permettant de montrer comment créer un contrôle dynamique, lui ajouter des propriétés, évènements puis permettre a l'utilisateur de pouvoir déplacer et redimensionner les contrôles a sa guise sur sa forme

l'exemple à été fait sur des richtextbox
j'ai gérer la redimention et le deplacement sur le bouton gauche de la souris + l'appui sur la touche CTRL ou SHIFT qui me paraissait pratique , de plus sur un RTB le bouton gauche de la souris sert a sélectionner du texte.

pour déplacer :
maintenez la touche CTRL enfoncé et le bouton gauche de la souris pour déplacer le contrôle
pour redimensionner
maintenez la touche SHIFT enfoncé et le bouton gauche de la souris au dessus de contrôle puis redimensionner

créer un projet avec une form et ajouter le code suivant :

Source / Exemple :


Public Class Form1
    Dim ctrlEnCours As RichTextBox 'le control en cours sur lequel on travaille
    Dim poscourante As Point 'la position de la souris sur le control en cours
    Dim deplace As Boolean 'si le controle doit se deplacer
    Dim changetaille As Boolean 'si le controle va changer de taille
    Dim positionClickForm As Point 'position de la souris sur la form
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'CRTL + bouton gauche souris sur un control pour le deplacer
        'SHIFT + bouton gauche souris pour redimentionner

        'creatin de 3 controles pour exemples 
        'leur taille est definie à 70/100, tx et ty 
        'leur position commence au coordonnée 50,50 de la feuille cx et cy

        Dim i, cx, cy, tx, ty As Integer : tx = 70 : ty = 100 : cx = 50 : cy = 50
        For i = 1 To 3
            creer_bouton(i, tx, ty, cx, cy)
            cx = cx + tx + 10 'ecart de 10 entre chaque controle
        Next i
    End Sub

    Private Sub creer_bouton(ByVal numcase As Integer, ByVal taillex As Integer, ByVal tailley As Integer, ByVal xcb As Integer, ByVal ycb As Integer)
        Dim CtrlRtb As New System.Windows.Forms.RichTextBox
        'DEFINITON DES PROPRIETES
        'son nom
        CtrlRtb.Name = "Rtb_" & (numcase + 1)
        'sa taille
        CtrlRtb.Size = New System.Drawing.Size(taillex, tailley)
        'sa position sur la form
        CtrlRtb.Location = New System.Drawing.Point(xcb, ycb)
        'multiligne = oui
        CtrlRtb.Multiline = True
        'visible=oui
        CtrlRtb.Visible = True
        'pas de bordure
        CtrlRtb.BorderStyle = BorderStyle.None
        'ajout du controle à la form
        Me.Controls.Add(CtrlRtb)

        'DEFINITION DES EVENEMENT
        'ajout des evenement utiles au deplacement et redimention
        'des controls précedement crées
        AddHandler CtrlRtb.MouseDown, AddressOf ctrl_MouseDown
        AddHandler CtrlRtb.MouseMove, AddressOf ctrl_MouseMove
        AddHandler CtrlRtb.KeyDown, AddressOf crtl_KeyDown
        AddHandler CtrlRtb.KeyUp, AddressOf crtl_KeyUp
    End Sub

    Private Sub crtl_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs)
        'si on releve ta touche ,
        'on annule le deplacement et le changement de taille
        'pour permettre de travailler sur le texte
        deplace = False
        changetaille = False
    End Sub
    Private Sub crtl_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs)
        ' Vérification si la touche controle est active
        'auquel cas on active le deplacement
        If e.KeyCode = Keys.ControlKey Then
            deplace = True
        End If

        'verification si la touche shif est activé
        'auquel cas on active le changement de taille
        If e.KeyCode = Keys.ShiftKey Then
            changetaille = True
        End If
    End Sub
    Private Sub ctrl_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
        ' si le bouton gauche de la souris est enfoncé
        'on recupere la position 
        If (e.Button = MouseButtons.Left) Then
            poscourante = e.Location
        End If
    End Sub

    Private Sub ctrl_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
        'si la souris passe sur le controle ,
        ' il devient le controle courant
        ctrlEnCours = sender
        'on affiche ses bordures (pour mieux travailler
        ctrlEnCours.BorderStyle = BorderStyle.FixedSingle
        ' Vérification si bouton gauche de la souris est bien enfoncé
        If (e.Button = MouseButtons.Left) Then
            'ici on deplace le controle
            If deplace = True Then
                ' Calcul de la nouvelle position du contrôle
                ctrlEnCours.Location = New Point(ctrlEnCours.Location.X + e.X - poscourante.X, ctrlEnCours.Location.Y + e.Y - poscourante.Y)
            End If

            'ici on change la taille du controle
            If changetaille = True Then
                'calcul de la nouvelle taille du controle
                If e.Y > ctrlEnCours.Height Then 'longeur
                    ctrlEnCours.Height = ctrlEnCours.Location.Y + e.Y
                Else
                    ctrlEnCours.Height = e.Y
                End If
                If e.X > ctrlEnCours.Width Then 'largeur
                    ctrlEnCours.Width = ctrlEnCours.Location.X + e.X
                Else
                    ctrlEnCours.Width = e.X
                End If
            End If
        End If
    End Sub

    Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
        ' si le bouton gauche de la souris est enfoncé
        'on recupere la position 
        If (e.Button = MouseButtons.Left) Then
            positionClickForm = e.Location
        End If
    End Sub

    Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
        'si on se trouve sur la feuille et non au dessus d'un controle richtextbox
        'on enleve les bordure du RTB sur lequel on etait et 
        'on annule le controle en cours
        If Not ctrlEnCours Is Nothing Then
            ctrlEnCours.BorderStyle = BorderStyle.None
            ctrlEnCours = Nothing
        End If
    End Sub
End Class

Conclusion :


code sans pretention , je cherchait juste un moyen de pouvoir redimentionner mes RTB suivants leur contenu et pouvoir les placer ou je voulais sur ma form.

me reste plus qu'a enregistrer ma configuration qui pourra changer ou non suivants mes utilisations.

A voir également

Ajouter un commentaire

Commentaires

nicolasq150784
Messages postés
51
Date d'inscription
mercredi 24 juin 2009
Statut
Membre
Dernière intervention
23 avril 2010

MERCI

J'avais deja vu ça un peu.

Encore merci de partager tes connaissances qui mon l'air nombreuse.

Encore merci ;)
elguevel
Messages postés
718
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
22 novembre 2016
3
Les .INI ne sont plus pris en charge dans .Net, considéré comme obsolète aujourd'hui, de plus pour les gerer il faut faire sa classe soit même.

Le nouveau standard étant l'XML,que d'ailleur le My.Settings utilise.

L'XML du My.Settings est se situe dans le profil de l'utilisateur, ce qui lui permet d'avoir ses propres parametres, et j'aime l'utilisé car il est simple d'utilisation, pratique et la serialisation est complétement transparente.

Une petite recherche sur la MSDN : http://msdn.microsoft.com/fr-fr/library/ms379611(VS.80).aspx

Bon code ...
tresorsdevie
Messages postés
135
Date d'inscription
lundi 17 juin 2002
Statut
Membre
Dernière intervention
20 juillet 2013

oui il serait intéressant de le savoir, jusqu'a présent j'ai toujours utiliser les fichiers ini pour mes paramétrages, que je trouvais tres utiles.
nicolasq150784
Messages postés
51
Date d'inscription
mercredi 24 juin 2009
Statut
Membre
Dernière intervention
23 avril 2010

AH oui aussi quel code utiliser pour sauvegarder la position d'un objet(un bouton par exemple) mais aussi la police, la couleur, la taille etc...

Merci beaucoupe d'avance
nicolasq150784
Messages postés
51
Date d'inscription
mercredi 24 juin 2009
Statut
Membre
Dernière intervention
23 avril 2010

Justement j'allais demander la diference en tre les fichiers .ini et My.Setting :)

Mais comment on fait avec My.setting pour créer, par code, des parametres?

Merci en tout cas elguevel ;)

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.