Comment centrer une PictureBox dans un form ? [Résolu]

linuxfred21 15 Messages postés mardi 15 juin 2004Date d'inscription 20 décembre 2007 Dernière intervention - 10 nov. 2007 à 13:42 - Dernière réponse : linuxfred21 15 Messages postés mardi 15 juin 2004Date d'inscription 20 décembre 2007 Dernière intervention
- 11 nov. 2007 à 14:32
Bonjour à toutes et à tous !

Voilà, j'ai un petit problème car j'ai parcouru la plupart des forums qui traitent du Visual Basic mais je n'ai pas vraiment trouvé de solution à mon problème.

En fait, j'ai une form que j'ai agrandie en plein écran et j'ai à l'intérieur trois lignes de quatre PictureBox.
Je souhaiterais les centrer horizontalement et automatiquement dans ma form.

Y a-t-il un attribut ou une propriété permettant de faire cela ?

Merci d'avance !

Fred
Afficher la suite 

Votre réponse

22 réponses

jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 11 nov. 2007 à 08:39
+3
Utile
Bon..

Nous sommes dimanche. Alors...un peu d'aide (arithmétique)...
Ton erreur est de diviser ta largeur disponible par le nombre d'images !
On y va :

soit Nbi le nombre d'images de largeur Li à centrer horizontalement sur une feuille de largeur LF
Appelons d la distance qui doit séparer une image d'une autre et/ou de chacun des 2 bords de la feuille

comment calculer d ?

d = (LF - (Nbi * Li))/(Nbi + 1)

(J'ai vu plus haut une division par 4 pour 4 images... je ne sais ç quoi tu dédies le résultat de cette division....)

d est donc la distance qui sépare la 1ère image du bord gauche de ta feuille. C'est également celle qui sépare le bord droit de chaque image du bord gauche de l'image suivante.

Tu vois bien que je n'ai pas utilisé ici un seul sou de code ...

Je te laisse continuer, maintenant, si tu veux bien ...
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de jmfmarques
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 10 nov. 2007 à 14:05
0
Utile
ou comment centrer (on oublie l'informatique) des rectangles de carton sur une feuille de papier

Je prends un crayon et une feuille de papier... et retourne 55 ans (au moins) en arrière ...

Je me dis que pour centrer horizontalement un rectatangle R1, je décide que son bord gauche est à :

(largeur_de_ma_ feuille - largeur de R1)/2

j'ai fait là un effort surhumain  et suis maintenant vraiment fatigué ...
Commenter la réponse de jmfmarques
linuxfred21 15 Messages postés mardi 15 juin 2004Date d'inscription 20 décembre 2007 Dernière intervention - 10 nov. 2007 à 15:16
0
Utile
Bonjour !

Entièrement d'accord mais c'est malheureusement ce que j'ai tenté la première fois mais sans succès.
En utilisant ce type de code, les proportions ne sont pas respectées et les images se chevauchent malgré tout :






PictureBox1.Left = (
Me.Width - Me.Height) / 4

Fred
Commenter la réponse de linuxfred21
linuxfred21 15 Messages postés mardi 15 juin 2004Date d'inscription 20 décembre 2007 Dernière intervention - 10 nov. 2007 à 15:28
0
Utile
Pardon, pas Height mais Width
Commenter la réponse de linuxfred21
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 10 nov. 2007 à 15:29
0
Utile
compare :
(largeur_de_ma_ feuille - largeur de R1)/2 (ce que j'ai écrit)
avec
PictureBox1.Left = (
Me.Width - Me.Height) / 4 (ce que tu as écrit)

C'est la même chose, pour toi ?
Commenter la réponse de jmfmarques
linuxfred21 15 Messages postés mardi 15 juin 2004Date d'inscription 20 décembre 2007 Dernière intervention - 10 nov. 2007 à 15:33
0
Utile
Je reprends car j'ai copié le mauvais exemple :





PictureBox1.Left = (
Me.Width - PictureBox1.Width) / 2
Commenter la réponse de linuxfred21
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 10 nov. 2007 à 15:43
0
Utile
Bon...

Avec quelles échelles en place pour la PictureBox et pour la Form ?
Commenter la réponse de jmfmarques
linuxfred21 15 Messages postés mardi 15 juin 2004Date d'inscription 20 décembre 2007 Dernière intervention - 10 nov. 2007 à 16:01
0
Utile
Mon form mesure 1112; 729 et j'utilise ensuite ce code pour l'agrandir et le mettre en premier plan :



Me.WindowState = FormWindowState.Maximized



Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None



Me.TopMost =

True




Mais je pense qu'avec cet essai il doit prendre la taille initiale du Form :






PictureBox1.Left = (Me.Width - PictureBox1.Width) / 2
Commenter la réponse de linuxfred21
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 10 nov. 2007 à 18:01
0
Utile
1) le centrage doit être fait après chaque redimensionnement, bien évidemment (et Me.WindowState = FormWindowState.Maximized est un redimensionnement)
2) tu n'as pas répondu à la question : Avec quelles échelles en place pour la PictureBox et pour la Form ?
Echelle, c'est en Français. Les British disent ScaleMode ...
Commenter la réponse de jmfmarques
linuxfred21 15 Messages postés mardi 15 juin 2004Date d'inscription 20 décembre 2007 Dernière intervention - 10 nov. 2007 à 21:48
0
Utile
Bonsoir !

Ma Form fait 1112X729 pixels (taille de ma zone de travail où se trouvent mes différentes PictureBox) et se trouve à 15X15 pixels du bord gauche de l'écran dans mon espace de création.

Mes PictureBox font quant à eux chacun 200X200 pixels.

J'ai essayé le centrage après avoir redimmensionné ma Form.

Fred
Commenter la réponse de linuxfred21
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 10 nov. 2007 à 22:31
0
Utile
Question (bien que tu n'aies toujours pas répondu à la mienne, pourtant claire...) :

Avec une seule PictureBox : parviens-tu à la centrer ?

cette question n'appelle que 2 réponses possibles : Oui ou Non.

Si non : ma question précédente (échelles) a toute son importance

Si oui : en centrer plusieurs horizontalement (sur une même horizontale) n'est alors que de l'application arithmétique élémentaire ... avant tout code informatique à proprement parler
Appliquer maintenant un centrage également vertical répond au même principe, en calculant aussi avec les hauteurs...
Prends une feuille de papier et un crayon, avant de coder, alors...
Commenter la réponse de jmfmarques
linuxfred21 15 Messages postés mardi 15 juin 2004Date d'inscription 20 décembre 2007 Dernière intervention - 10 nov. 2007 à 22:56
0
Utile
Bonsoir !

Désolé de ne pas avoir répondu plus clairement avant.
En fait, je n'ai rien modifié à ce niveau, je suis en mode normal, c'est-à-dire 1/1 dans mes paramètres.

Je parviens en effet à centrer ma première PictureBox en divisant par 2 ou par 4 mais ce sont les autres PictureBox qui ne suivent pas et qui se chevauchent lorsque je demande à ce qu'elles soient centrées.

Fred
Commenter la réponse de linuxfred21
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 10 nov. 2007 à 23:23
0
Utile
Je m'en doutais un peu ...

Alors ? ====>>> arithmétique pure (la prog ne vient qu'après, et pour lui donner ton raisonnement artithmétique.... l'as-tu fait, ce raisonnement qui ne
fait nullement appel, à ce stade, à des connaissances d'une syntaxe de développement ?... Commence donc par là !)
Commenter la réponse de jmfmarques
linuxfred21 15 Messages postés mardi 15 juin 2004Date d'inscription 20 décembre 2007 Dernière intervention - 10 nov. 2007 à 23:36
0
Utile
Justement, je viens de refaire le calcul mais malheureusement le chevauchement survient toujours à partir de la seconde PictureBox.
C'est à se demander si le redimensionnement ne décale pas tout, bien qu'il soit réalisé avant le calcul pour positionner mes PictureBox.
Commenter la réponse de linuxfred21
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 10 nov. 2007 à 23:38
0
Utile
Non ! Surement pas ...!
Revois donc tes calculs...
Commenter la réponse de jmfmarques
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 11 nov. 2007 à 02:37
0
Utile
salut,

1) pas de scalewidth scaleheight sous dotnet?
2) bien que le principe me gêne un peu..., pourquoi ne pas placer tes 4 PB dans un conteneur?
3) pas d'objet ou de propriété Anchor en dotnet ? (je l'ai bien vu quelquepart pourtant...)

je trouve dommage qu'on lise si peu de code malgré l'impression de tant de tests...

bonne soirée ++
Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Commenter la réponse de PCPT
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 11 nov. 2007 à 09:51
0
Utile
Je t'ai en fait tout fait....
Il ne te reste qu'à affecter un coefficientK à chaque image :
0 pour la 1ère, 1 pour la seconde, 2 pour la 3ème, etc....

la position d'une image (son .left) est alors, tout bêtement :

Posleft = (d * (K + 1)) + (Li * K)
Commenter la réponse de jmfmarques
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 11 nov. 2007 à 11:48
0
Utile
salut,

ah là jmfmarques  j'sis pas trop d'accord avec ce calcul, du moins son utilité

énoncé : En fait, j'ai une form que j'ai agrandie en plein écran et j'ai à l'intérieur trois lignes de quatre PictureBox.

 (tien à la relecture je ne dais pas s'il y a 4 ou 12 PB)

dans tous les cas considérons l'ensemble des objects, donc un rectangle (de 12, de 4 ou même de 1)

on ne va pas revenir sur "centrer UNE image", tu l'as déjà fait
donc il suffit de multiplier height par le nombre de lignes, et width par le nombre de colonnes

on a alors la position de la première PB
et de là aucun autre calcul, la p2 est au top de la p1, left à .left+.width de la p1
p3 et p4 de p2 et p3
top p5 est à .top+.height de la p1 et left à .left de p2 ou à .left+.width de la p1 (c'est pareil), etc pour la suite

rien besoin de plus
Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Commenter la réponse de PCPT
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 11 nov. 2007 à 12:21
0
Utile
Bonjour PCPT,

j'ai montré comment centrer horizontalement
le principe du calcul pour le centrage vertical est, s'il y a plusieurs rangées à centrer verticalement, rigoureusement le même...

C'est celui que j'applique dans un visualiteur d'album bien plus complexe où, de surcroît, les images sont tantôt plus hautes que larges, tantôt plus larges que hautes... et toutes à redimensionner pour avoir toujours le même nombre d'images par rangée...
Ce n'est que de l'arithmétique et c'est la même que celle qu'applique n'importe quel petit encadreur aux fins fonds de l'Inde.
Commenter la réponse de jmfmarques
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 11 nov. 2007 à 13:06
0
Utile
tout à fait d'accord pour des images (ou peintures avec ou sans cadre ^^) de tailles différentes, mais me semble trop complexe inutilement pour des tailles rigoureusement les mêmes.
une fois le premier calcul fait ce n'est plus la peine de le refaire puisque la référence est alors correcte

bonne journée @+ tard
Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Commenter la réponse de PCPT

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.

Comment centrer une PictureBox dans un form ? - page 2