UserControl

Résolu
diablosv Messages postés 118 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 118 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 211
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 14006 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 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
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 14006 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 118 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 14006 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 14006 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 14006 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 118 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 118 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
Rejoignez-nous