Faire une copie d'un unsercontrol sur un form [Résolu]

Messages postés
372
Date d'inscription
vendredi 27 juillet 2007
Statut
Membre
Dernière intervention
22 juillet 2013
- - Dernière réponse :  Utilisateur anonyme - 10 oct. 2012 à 19:03
Bonjour ,
J'ai plusieurs 'usercontrol' représentants les symboles
sur un form.
Comment puis je créer une ou plusieurs copies de ces 'usercontrol' en cliquant dessus et en même en les glissants au centre de la form ?
Puis je les renommés a chaque fois afin de pouvoir
récupérer le mon de toud les 'usercontrol ?

j'ai cherché mais je n'ai pas trouvé.
Merci de votre aide

Dedenet2
Afficher la suite 

8 réponses

Meilleure réponse
3
Merci
Bonsoir,

J'ai une manière assez simple pour faire ceci, il y a peut-être plus simple mais bon...

Option Strict On
Public Class Form1
    Dim MonPoint As Point

    Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
        'j'ai créé un UserControl1 (projet/ajouter un controle utilisateur)
        'je l'ai placé sur le formulaire form1
        'je l'ai appelé UserControlX , c'est donc une instance de UserControl1
        'j'abonne par code ce controle à un événement MouseDown
        AddHandler UserControlX.MouseDown, AddressOf AjouteInstance
    End Sub

    Private Sub AjouteInstance(sender As Object, e As MouseEventArgs)
        'clic avec le bouton de droite = création d'une instance de mon UserControl1
        If e.Button = Windows.Forms.MouseButtons.Right Then
            'mémorisation de la position du clic gauche
            MonPoint = New Point(e.X + Me.Left + SystemInformation.BorderSize.Width, _
                                 e.Y + Me.Top + SystemInformation.CaptionHeight)

            'instance d'un usercontrol1
            Dim MonPremierUC1 As UserControl1 = New UserControl1
            With MonPremierUC1
                'on lui donne les même coordonnées que UserControlX (sender)
                .Bounds = DirectCast(sender, UserControl1).Bounds
                'on peut le nommer
                .Name = "baba"
            End With
            'on l'abonne à l'événement MouseMove commun
            AddHandler MonPremierUC1.MouseMove, AddressOf MonControle_MouseMove
            'on l'ajoute au formulaire
            Me.Controls.Add(MonPremierUC1)
            'on le met en avant plan pour pouvoir le faire bouger
            MonPremierUC1.BringToFront()
        End If
    End Sub

    Private Sub MonControle_MouseMove(sender As Object, e As System.Windows.Forms.MouseEventArgs)
        'clic avec le bouton de gauche = déplacement
        If e.Button = Windows.Forms.MouseButtons.Left Then
            'déplacement du controle en se servant de la position du curseur
            DirectCast(sender, UserControl1).Location = Point.Subtract(Cursor.Position, New Size(MonPoint))
        End If
    End Sub

End Class

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 190 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Utilisateur anonyme
3
Merci
Lorsque tu ajoutes un UserControl manuellement à ton projet, tu remarqueras qu'il apparaît dans ta boîte à outils (ainsi que dans la fenêtre explorateur de solutions) et qu'il prend comme nom par défaut 'UserControl1'. Il suffit alors de le faire glisser sur un formulaire. Le simple fait de faire glisser ce contrôle sur ton formulaire crée automatiquement une instance de la classe de base UserControl1.

Ensuite, tu peux nommer ce composant instancié par le biais de sa fenêtre de propriétés (propriété Name). Dans mon exemple, je l'ai appelé UserControlX.

La classe UserControl1 existe toujours dans le projet (voir ta fenêtre explorateur de solutions) et c'est elle qu'on instancie dans le code dynamiquement.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 190 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Utilisateur anonyme
Messages postés
372
Date d'inscription
vendredi 27 juillet 2007
Statut
Membre
Dernière intervention
22 juillet 2013
1
0
Merci
Bonsoir ,
J'ai testé ton code mais je n'arrive pas à le faire fonctionner.
J'ai créé un usercontrol1 (Name) et le l'ai mis sur le form.
Et apres je ne sais plus !

Tu dis "'je l'ai appelé UserControlX ,c'est donc une instance de UserControl1"
Que dois je écrire comme code ?

Merci
Dedenet2
Commenter la réponse de dedenet2
Messages postés
372
Date d'inscription
vendredi 27 juillet 2007
Statut
Membre
Dernière intervention
22 juillet 2013
1
0
Merci
Bonsoir ,
Je l'ai l'habitude de tous ces termes !
Je vais exploiter ton précieux code et merci pour ton aide

Effectivement, Usercontrol apparait dans la boite à outils.
Mais quand je crée un controle, parfois il apparait dans la boite à outils, parfois pas tout de suite !
A quelle moment, le controle est dispo ? Apres l'enregistrement ???


Merci
A++
Dedenet2
Commenter la réponse de dedenet2
0
Merci
A quelle moment, le controle est dispo ? Apres l'enregistrement ???

Je ne sais pas.
Commenter la réponse de Utilisateur anonyme
Messages postés
372
Date d'inscription
vendredi 27 juillet 2007
Statut
Membre
Dernière intervention
22 juillet 2013
1
0
Merci
Bonjour banana32 ,
J'ai essayé ton code et le principe de la copie et du déplacement des 'Usercontrols' sur le 'form' fonctionne bien.
Cependant il y a petit souci.
Dès que je redimensionnes le 'Form' et que je le mets en pleine écran par exemple et que je veux redéplacer un quelconque
'usercontrol' créé en cliquant dessus , le 'Usercontrol' selectionné est ejecté plus loin (vers la gauche je crois).
En fait , il ne reste pas sur la souris.
Je ne sais ce qu'il se passe mais cela doit un souci de localisation de la souris...??
As tu une idéé ?

Merci
A++
Dedenet2
Commenter la réponse de dedenet2
Messages postés
372
Date d'inscription
vendredi 27 juillet 2007
Statut
Membre
Dernière intervention
22 juillet 2013
1
0
Merci
Bonsoir ,
Pour faire apparaitre un 'UserControl' que l'on a créé dans la boite à outil, je fais une actualisation dans le menu "Deboguer\Générer .....

Dedenet2
Commenter la réponse de dedenet2
0
Merci
Bonsoir dedenet2,

Tu dois mémoriser un point dans l'événement MouseDown, sur lequel sera calculé le déplacement dans l'autre événement MouseMove. On à vu ceci dans un de tes posts précédents.
Commenter la réponse de Utilisateur anonyme