Faire une copie d'un unsercontrol sur un form

Résolu
dedenet2 Messages postés 372 Date d'inscription vendredi 27 juillet 2007 Statut Membre Dernière intervention 22 juillet 2013 - 4 oct. 2012 à 17:28
 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

8 réponses

Utilisateur anonyme
4 oct. 2012 à 19:59
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
3
Utilisateur anonyme
5 oct. 2012 à 12:10
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.
3
dedenet2 Messages postés 372 Date d'inscription vendredi 27 juillet 2007 Statut Membre Dernière intervention 22 juillet 2013 2
4 oct. 2012 à 22:18
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
0
dedenet2 Messages postés 372 Date d'inscription vendredi 27 juillet 2007 Statut Membre Dernière intervention 22 juillet 2013 2
5 oct. 2012 à 19:51
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
5 oct. 2012 à 21:15
A quelle moment, le controle est dispo ? Apres l'enregistrement ???

Je ne sais pas.
0
dedenet2 Messages postés 372 Date d'inscription vendredi 27 juillet 2007 Statut Membre Dernière intervention 22 juillet 2013 2
8 oct. 2012 à 17:36
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
0
dedenet2 Messages postés 372 Date d'inscription vendredi 27 juillet 2007 Statut Membre Dernière intervention 22 juillet 2013 2
9 oct. 2012 à 20:51
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
0
Utilisateur anonyme
10 oct. 2012 à 19:03
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.
0
Rejoignez-nous