UserControl

Résolu
diablosv
Messages postés
120
Date d'inscription
dimanche 22 octobre 2000
Statut
Membre
Dernière intervention
26 février 2014
- 9 déc. 2013 à 11:58
diablosv
Messages postés
120
Date d'inscription
dimanche 22 octobre 2000
Statut
Membre
Dernière intervention
26 février 2014
- 9 déc. 2013 à 15:41
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

ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
9 déc. 2013 à 13:13
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à ?
0
cs_Jack
Messages postés
14007
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
79
9 déc. 2013 à 13:32
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.
0
NHenry
Messages postés
14944
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
4 juillet 2022
161
9 déc. 2013 à 13:37
(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.
0
cs_Jack
Messages postés
14007
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
79
9 déc. 2013 à 13:52
lol, tu as raison.
Chasser le naturel, il revient au galop.
Merci
0
diablosv
Messages postés
120
Date d'inscription
dimanche 22 octobre 2000
Statut
Membre
Dernière intervention
26 février 2014

Modifié par diablosv le 9/12/2013 à 14:30
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
0
cs_Jack
Messages postés
14007
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
79
Modifié par cs_Jack le 9/12/2013 à 14:36
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
0
cs_Jack
Messages postés
14007
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
79
9 déc. 2013 à 14:41
Ah bah oui mais non.
Les objets ne sont pas au même niveau ...
Epineux problème.
0
cs_Jack
Messages postés
14007
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
79
9 déc. 2013 à 14:44
lol, je ne sais même pas comment faire pour placer un UC sur une forme ... je sèche
0
diablosv
Messages postés
120
Date d'inscription
dimanche 22 octobre 2000
Statut
Membre
Dernière intervention
26 février 2014

9 déc. 2013 à 15:41
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
@++
0

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

Posez votre question
diablosv
Messages postés
120
Date d'inscription
dimanche 22 octobre 2000
Statut
Membre
Dernière intervention
26 février 2014

9 déc. 2013 à 14:39
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

0