2011-09-02 2 views
0

J'essaie de créer 81 blocs d'image et de les positionner automatiquement à une certaine distance les uns des autres, mais ils ne semblent pas se placer dans un ordre logique. Je dois initialiser le point X à -1700 pour qu'ils apparaissent même sur l'écran. Le code suivant obtient les 15 premiers où je les veux mais ensuite ils commencent à empiler les uns sur les autres au lieu de continuer le modèle. C'est le résultat d'environ une heure de bricolage mais au début la logique semblait bien. J'ai même eu une boîte de message qui afficherait le X actuel, Y qui était en train d'être défini et il était correct qu'il ne les placerait pas à ces coordonnées.comment positionner un objet à l'aide de variables

int X = -1700; 
int Y = 0; 

for (int i = 0; i < 81; i++) 
{ 
    this.Controls.Add(championThumbNailsArray[i]); 
    championThumbNailsArray[i].Height = 80; 
    championThumbNailsArray[i].Width = 80; 
    championThumbNailsArray[i].Location = new Point(X, Y); 
    // MessageBox.Show(Convert.ToString(X) + "," + Convert.ToString(Y)); 
    championThumbNailsArray[i].ImageLocation = akali.grabPicture(); 
    //championThumbNailsArray[i].ImageLocation = championsArray[i].grabPicture(); 
    if (X <= 425) 
     X = X + 85; 
    else 
    { 
     X = -1700; 
     Y = Y + 85; 
    }       
} 
+1

Quel est le contrôle (ce) qu'ils sont être ajouté à? –

+0

Il serait peut-être plus facile pour vous d'ajouter ces contrôles à FlowLayoutPanel. Ce contrôle positionnera ces contrôles pour vous – Berial

+1

Si vous devez initier x à -1700 juste pour les voir, alors vous avez quelque chose de désactivé. Les formulaires commencent à 0,0. –

Répondre

0

Ce code fonctionne comme vous attendez

private void Form1_Load(object sender, EventArgs e) 
     { 
      int x = 0; 
      int y = 0; 

      for (int i = 0; i < 81; i++) 
      { 
       PictureBox p = new PictureBox(); 
       p.BorderStyle = BorderStyle.Fixed3D; 
       p.Height = 80; 
       p.Width = 80; 
       p.Location = new Point(x, y); 

       x += 85; 

       if (x > 425) 
       { 
        x = 0; 
        y += 85; 
       } 

       this.Controls.Add(p); 
      } 

     } 

enter image description here

Mais j'aller avec quelque chose comme l'a dit @Ed, un contrôle FlowLayout

+0

Je l'ai eu en travaillant avec votre code mais j'ai encore dû changer le X et Y pour initialiser à x = -170, y = -255 pour le positionner correctement comme dans le image. Ça marche pour l'instant mais je vais regarder dans le contrôle de flowlayout merci – Mike

+0

Je ferais le léger changement d'aller avec 'p.Location = new Point ((i% 26) * 85, (i/26) * 85); 'éviter l'état désordonné des variables' x' & 'y', mais sinon cela me semble bon. +1 pour le contrôle 'FlowLayout' comme meilleure alternative. ' – Enigmativity

1

Au lieu de placer des éléments manuellement, utilisez un FlowLayoutPanel. Ajoutez les contrôles au panneau et laissez-le faire l'arrangement pour vous.

+0

Merci pour la suggestion Je vais essayer cela – Mike

Questions connexes