Glisser/déplacer groupe contrôles dans un panel

Résolu
kikou93 Messages postés 417 Date d'inscription mardi 4 février 2014 Statut Membre Dernière intervention 24 septembre 2018 - Modifié par ucfoutu le 18/09/2016 à 10:49
kikou93 Messages postés 417 Date d'inscription mardi 4 février 2014 Statut Membre Dernière intervention 24 septembre 2018 - 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

3 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
Modifié par ucfoutu le 18/09/2016 à 18:00
ç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.
1
kikou93 Messages postés 417 Date d'inscription mardi 4 février 2014 Statut Membre Dernière intervention 24 septembre 2018 1
Modifié par kikou93 le 18/09/2016 à 19:01
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 ?
0
kikou93 Messages postés 417 Date d'inscription mardi 4 février 2014 Statut Membre Dernière intervention 24 septembre 2018 1
Modifié par kikou93 le 22/09/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
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
17 sept. 2016 à 20:07
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, ...)
0
kikou93 Messages postés 417 Date d'inscription mardi 4 février 2014 Statut Membre Dernière intervention 24 septembre 2018 1
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
18 sept. 2016 à 10:48
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à.
0
kikou93 Messages postés 417 Date d'inscription mardi 4 février 2014 Statut Membre Dernière intervention 24 septembre 2018 1
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
0
Rejoignez-nous