Comment centrer une PictureBox dans un form ?

Résolu
linuxfred21 Messages postés 15 Date d'inscription mardi 15 juin 2004 Statut Membre Dernière intervention 20 décembre 2007 - 10 nov. 2007 à 13:42
linuxfred21 Messages postés 15 Date d'inscription mardi 15 juin 2004 Statut Membre Dernière intervention 20 décembre 2007 - 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

22 réponses

jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
11 nov. 2007 à 08:39
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 ...
3
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
10 nov. 2007 à 14:05
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é ...
0
linuxfred21 Messages postés 15 Date d'inscription mardi 15 juin 2004 Statut Membre Dernière intervention 20 décembre 2007
10 nov. 2007 à 15:16
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
0
linuxfred21 Messages postés 15 Date d'inscription mardi 15 juin 2004 Statut Membre Dernière intervention 20 décembre 2007
10 nov. 2007 à 15:28
Pardon, pas Height mais Width
0

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

Posez votre question
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
10 nov. 2007 à 15:29
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 ?
0
linuxfred21 Messages postés 15 Date d'inscription mardi 15 juin 2004 Statut Membre Dernière intervention 20 décembre 2007
10 nov. 2007 à 15:33
Je reprends car j'ai copié le mauvais exemple :





PictureBox1.Left = (
Me.Width - PictureBox1.Width) / 2
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
10 nov. 2007 à 15:43
Bon...

Avec quelles échelles en place pour la PictureBox et pour la Form ?
0
linuxfred21 Messages postés 15 Date d'inscription mardi 15 juin 2004 Statut Membre Dernière intervention 20 décembre 2007
10 nov. 2007 à 16:01
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
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
10 nov. 2007 à 18:01
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 ...
0
linuxfred21 Messages postés 15 Date d'inscription mardi 15 juin 2004 Statut Membre Dernière intervention 20 décembre 2007
10 nov. 2007 à 21:48
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
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
10 nov. 2007 à 22:31
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...
0
linuxfred21 Messages postés 15 Date d'inscription mardi 15 juin 2004 Statut Membre Dernière intervention 20 décembre 2007
10 nov. 2007 à 22:56
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
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
10 nov. 2007 à 23:23
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à !)
0
linuxfred21 Messages postés 15 Date d'inscription mardi 15 juin 2004 Statut Membre Dernière intervention 20 décembre 2007
10 nov. 2007 à 23:36
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.
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
10 nov. 2007 à 23:38
Non ! Surement pas ...!
Revois donc tes calculs...
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
11 nov. 2007 à 02:37
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
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
11 nov. 2007 à 09:51
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)
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
11 nov. 2007 à 11:48
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
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
11 nov. 2007 à 12:21
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.
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
11 nov. 2007 à 13:06
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
0
Rejoignez-nous