Glisser/déplacer groupe contrôles dans un panel [Résolu]

kikou93 399 Messages postés mardi 4 février 2014Date d'inscription 13 avril 2018 Dernière intervention - 17 sept. 2016 à 17:24 - Dernière réponse : kikou93 399 Messages postés mardi 4 février 2014Date d'inscription 13 avril 2018 Dernière intervention
- 22 sept. 2016 à 14:30
Bonjour,
Je bloc sur mon logiciel
Je ne sais pas comment vous expliquer à quoi ce problème consiste, alors je vais vous donner un exemple :
Quand on affiche une image avec le visionneuse de photos windows et on zoome beaucoup, une partie de l'image n'est pas visible (car l'image est devenue trés grande par rapport l'espace reservé pour elle), alors pour voir cette partie de l'image qui n'est pas visible on clique sur l'image avec la souris et on la déplace vers haut/bas/gauche/droite tout en maintenant la souris enfoncée.
Je veux faire la même chose pour le contenue d'un panel en faisant les même manipulation pour afficher les contenue invisible du panel
Esque c'est possible ?
J'ai beau chercher je ne trouve pas
Remarque : ce n'est pas les barres de défilements que je veux (autoscroll = true)
merci pour votre future aide
--
Comment ça marche c'est cool! 
      1000 Merci les Amis
Afficher la suite 

7 réponses

Répondre au sujet
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - Modifié par ucfoutu le 18/09/2016 à 18:00
+1
Utile
2
ça veut dire que les Textbox, Listbox, label serrant déplacer de leur emplacement d'origine

Non. Seule la position de leur conteneur (donc Panel2) par rapport à l'angle supérieur gauche de Panel1 est impactée.
Si tes contrôles sont bien DANS le Panel2, leur position relative (par rapport à Panel2 n'est pas impactée).
Je ne sais par ailleurs pas (je ne pratique pas VB.Net), si tes instructions de déplacement du Panel2 sont les bonnes, elles.

EDIT : j'ai même de très sérieux doutes à ce sujet dans la mesure où la lecture de MSDN m'apprend que Control.Location retourne les coordonnées du curseur par rapport à l'écran et non par rapport à Panel1, alors que Panel2.Location devrait être les coordonnées de ¨Panel2 par rapport à l'angle supérieur gauche de Panel1 et non par rapport à l'écran.
Attends donc l'avis d'un VB.Nettiste en ce qui concerne cet aspect-là

________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
Cette réponse vous a-t-elle aidé ?  
kikou93 399 Messages postés mardi 4 février 2014Date d'inscription 13 avril 2018 Dernière intervention - 18 sept. 2016 à 18:29
j'ai compris merci ucfoutu pour l'explication
maintenant si je dit que je veux bouger les ScrollBar (HorizontalScroll et VerticalScroll) en utilisant un Panel
par exemple (en mettant AutoScroll = True) :
Dim NewPoint As New System.Drawing.Point
Dim X, Y As Integer
Private Sub Panel1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Panel1.MouseDown
X = Control.MousePosition.X - Panel1.HorizontalScroll.Value
Y = Control.MousePosition.Y - Panel1.VerticalScroll.Value
End Sub
Private Sub Panel1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Panel1.MouseMove
If e.Button = MouseButtons.Left Then
NewPoint = Control.MousePosition
NewPoint.Y -= (Y)
NewPoint.X -= (X)
Panel1.HorizontalScroll.Value = X
Panel1.VerticalScroll.Value = Y
End If
End Sub

bien sur il y a des erreur dans ce code, il ne marche pas comme je veux
Esque c'est possible ?
kikou93 399 Messages postés mardi 4 février 2014Date d'inscription 13 avril 2018 Dernière intervention - 22 sept. 2016 à 14:30
Bonjour ucfoutu et NHenry,
j'utilise la méthode que tu m'a suggéré (celle de déplacer le Panel 2)
et pour éviter que le Panel 2 parte trop loin (hors des limites du Panel 1) j'ai ajouter le code suivant :
  Private Sub Panel1_LocationChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Panel1.LocationChanged
Dim positionXMaximale As Integer = Panel2.Width - Panel1.Width
Dim positionYMaximale As Integer = Panel2.Height - Panel1.Height
If Panel2.Left <= (-positionXMaximale) Then
Panel2.Left = (-positionXMaximale)
End If
If Panel2.Top <= (-positionYMaximale) Then
Panel2.Top = (-positionYMaximale)
End If

If Panel2.Left >= 0 Then
Panel2.Left = 0
End If
If Panel2.Top >= 0 Then
Panel2.Top = 0
End If
End Sub


bien sûr les dimensions du Panel 2 sont supérieur à ceux du Panel 1
Merci Beaucoup pour Votre aide
Commenter la réponse de ucfoutu
NHenry 14129 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 19 avril 2018 Dernière intervention - 17 sept. 2016 à 20:07
0
Utile
1
Tu peux dessiner sur la surface du contrôle (voir évènement OnPaint et l'objet Graphics) en déplaçant les coordonnées de départ dans le négatif.

Pour le déplacement, il faudra le gérer toi-même avec les événements souris (MouseClick, MouseDown, MouseUp, MouseMove, ...)
kikou93 399 Messages postés mardi 4 février 2014Date d'inscription 13 avril 2018 Dernière intervention - 17 sept. 2016 à 20:43
Merci de m'avoir répondu aussi rapidement

Tu peux dessiner sur la surface du contrôle (voir évènement OnPaint 
et l'objet Graphics) en déplaçant les coordonnées de départ
dans le négatif.

????

désolé mais je crois que tu m'a mal compris
premierement je créer un panel d'un grand taille et je le rempli avec des textbox, listBox, Bouton ...etc
deuxièmement mot je le rétrécit, bien évidemment certain contenue ( textbox, listBox, Bouton ...etc) ne sont pas totalement visible (ou pas du tout visible)
alors pour voir cette partie du panel qui n'est pas visible on clique sur le panel avec la souris et on se déplace dedans (dans le panel) vers haut/bas/gauche/droite tout en maintenant la souris enfoncée
j'espère que cette fois je suis plus claire
Commenter la réponse de NHenry
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 18 sept. 2016 à 10:48
0
Utile
1
Bonjour,
1)
Je ne sais pas comment vous expliquer à quoi ce problème consiste


désolé mais je crois que tu m'a mal compris

Lire le texte de ma signature ...
2) j'ai modifié le titre ambigü ("Vb.Net Afficher le contenue invisible d'un panel").
3) mets donc les contrôles dans un second panel contenu dans le 1er et gère ses évènements de souris pour déplacer ce second panel.
Voilà.
kikou93 399 Messages postés mardi 4 février 2014Date d'inscription 13 avril 2018 Dernière intervention - 18 sept. 2016 à 16:40
Bonsoir ucfoutu
Merci d'avoir changer le titre c'est mieux comme ça
si j'ai bien compris, je met le Panel 2 dans le Palel 1
je met les Textbox, Listbox, label dans le Panel 2, et j'applique le code suivant sur lui :

 Dim NewPoint As New System.Drawing.Point
Dim X, Y As Integer
Private Sub Panel2_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Panel2.MouseDown
X = Control.MousePosition.X - Panel2.Location.X
Y = Control.MousePosition.Y - Panel2.Location.Y
End Sub
Private Sub Panel2_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Panel2.MouseMove
If e.Button = MouseButtons.Left Then
NewPoint = Control.MousePosition
NewPoint.Y -= (Y)
NewPoint.X -= (X)
Panel2.Location = NewPoint
End If
End Sub



ça veut dire que les Textbox, Listbox, label serrant déplacer de leur emplacement d'origine
moi ce que je veux c'est qu'ils garde leur emplacement, je veux avoir la même fonction que les barres de défilement, on clique sur le panel avec la souris et on navigant dans ce dernier vers haut/bas/gauche/droite tout en maintenant la souris enfoncée
Commenter la réponse de ucfoutu

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.