UserControl [Résolu]

Signaler
Messages postés
120
Date d'inscription
dimanche 22 octobre 2000
Statut
Membre
Dernière intervention
26 février 2014
-
Messages postés
120
Date d'inscription
dimanche 22 octobre 2000
Statut
Membre
Dernière intervention
26 février 2014
-
Bonjour,

voila j'ai crée un usercontrol contenant plusieurs élément. Je souhaiterais maintenant, comme je le fait avec un control Bouton ou autre en utilisant l'événement MouseMove, le déplacer en cliquant dessus.
Le problème c'est qu'il faut que je clic exactement sur la form du control.
Comment faire pour affecter les valeurs de position au usercontrol en cliquant n'importe ou sur l'objet.

D'avance Merci

5 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
Bonjour,
Et par quel "biais" comptes-tu faire comprendre que c'est tel contrôle et non tel autre contrôle que tu veux déplacer sur ton usercontrrol ?
Question idiote, que je pose là ?
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
75
Salut Diablosv et un grand bonjour à Ucfoutu

Ton UserControl est un objet comme les autres.
Il a donc les propriétés Mouse_Click, Mouse_Move (lues depuis la forme qui héberge le contrôle).
Le code de déplacement sera donc placé dans cette forme.
Il te suffit donc de rechercher comment déplacer un objet et tu l'appliques à ton contrôle.
De mémoire, il te faut :
- Dans la partie "Déclarations" de ta forme, tu dimensionnes :
- 2 Long pour mémoriser les positions init_x et init_y du clic initial
- 1 booléen pour mémoriser qu'un déplacement est en cours
- Dans _MouseDown de ton contrôle, si le booléen est à False, tu mémorises la position init_x et init_y (fournie dans les paramètres de la Sub) et tu mets ton booléen à True
- Dans _MouseMove, si le booléen est à True, tu gères le déplacement de l'objet (Move) par calcul en utilisant le init_x et init_y mémorisé et le x-y fourni par la Sub
- Dans _MouseUp de ton contrôle, si le booléen est à True, tu le remets à False

Il y a des exemples parmi les sources.
Messages postés
14799
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
6 juin 2021
155
(détail)
"2 Long pour mémoriser les positions init_x et init_y du clic initial "
Si c'est en .NET, les Integer sont les Long de VB6.
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
75
lol, tu as raison.
Chasser le naturel, il revient au galop.
Merci
Messages postés
120
Date d'inscription
dimanche 22 octobre 2000
Statut
Membre
Dernière intervention
26 février 2014

Bonjour
merci pour vos reponse.
En fait le deplacement n'est pas un probleme

pour les autres control je fais comme ca :

' Dans le mouseDown je recupere le control et sa position
Private Sub ChampsMouseDownHandler(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)

Txt_Location = e.Location
Txt = DirectCast(CType(sender, TextBox), TextBox)

End Sub

' dans le mouse move j'affecte les nouvelles valeur en dynamique
ce qui a pour effet de garder l'objet coller a la souris durant le deplacement
Private Sub ChampsMouseMoveHandler(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)

If e.Button = Windows.Forms.MouseButtons.Right Then

If G_DisplayItem_Dict(Txt.Parent.Name).Numeriques(Txt.Name).Locked = False Then

Txt.Left += (e.X - Txt_Location.X)
Txt.Top += (e.Y - Txt_Location.Y)

G_DisplayItem_Dict(Txt.Parent.Name).Numeriques(Txt.Name).Location = Txt.Location

End If

End If

End Sub

et ca marche bien

sur le usercontrol j'ai plusieurs objet, un label, un textbox un ovalshape. Pour pouvoir le deplacer il faut absolument que je clic sur une partie du usercontrol. Si je clic sur le label ben ca marche pas. je voulais savoir si il etait possible de dire qd on clic sur un des objets du usercontrol tu passe l'evenement clic au usercontrol.

En esperant avoir ete clair

Diablo_SV
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
75
Je pense que oui.
Ma réponse, il est vrai, était plutôt issue des techniques VB6.
En .Net, il doit suffire d'associer le Handle de l'évènement du Label à celui du control, genre
Private Sub monControl_MouseMachin(Params) _
Handle monControl.MouseMachin, _
monLabel.MouseMachin, _
monOvalShape.MouseMachin

A tester, je n'ai pas de UserControl sous la main pour tester
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
75
Ah bah oui mais non.
Les objets ne sont pas au même niveau ...
Epineux problème.
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
75
lol, je ne sais même pas comment faire pour placer un UC sur une forme ... je sèche
Messages postés
120
Date d'inscription
dimanche 22 octobre 2000
Statut
Membre
Dernière intervention
26 février 2014

c'est bon ca marche
tu m'as mi sur une piste ca marche

AddHandler CtrlNum.MouseDown, AddressOf ChampsMouseDownHandler
AddHandler CtrlNum.TextBox1.MouseDown, AddressOf TextBoxMouseDownHandler
AddHandler CtrlNum.MouseMove, AddressOf ChampsMouseMoveHandler
AddHandler CtrlNum.TextBox1.MouseMove, AddressOf ChampsMouseMoveHandler

Private Sub TextBoxMouseDownHandler(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)

CtrlNum_Location = e.Location
CtrlNum.TextBox1 = DirectCast(CType(sender, TextBox), TextBox)

End Sub


Private Sub ChampsMouseDownHandler(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)

CtrlNum_Location = e.Location
CtrlNum = DirectCast(CType(sender, Ctrl_Numerique), Ctrl_Numerique)

End Sub


Private Sub ChampsMouseMoveHandler(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)

If e.Button = Windows.Forms.MouseButtons.Right Then

If G_DisplayItem_Dict(CtrlNum.Parent.Name).CtrlNumeriques(CtrlNum.Name).Locked = False Then

CtrlNum.Left += (e.X - CtrlNum_Location.X)
CtrlNum.Top += (e.Y - CtrlNum_Location.Y)

G_DisplayItem_Dict(CtrlNum.Parent.Name).CtrlNumeriques(CtrlNum.Name).Location = CtrlNum.Location

End If

End If

End Sub

Encore Merci
Pour le moment ca fera bien l'affaire comme methode
@++
Messages postés
120
Date d'inscription
dimanche 22 octobre 2000
Statut
Membre
Dernière intervention
26 février 2014

salut cs_Jack

tu veut dire d'essayer de faire pointer tous les événements vers 1 seul ?
Je vais tester ça de suite et je te dirait si cela marche
merci pour la piste a suivre