2011-09-02 40 views
0

我正在尝试创建81个图片框,并让它们自动相互间隔一定距离,但它们似乎没有按照任何逻辑顺序排列。我必须将X点初始化为-1700,以使它们甚至出现在屏幕上。下面的代码获取我想要的第15个代码,但是然后它们开始堆叠在另一个之上而不是继续该模式。这是大约一小时修补的结果,但最初的逻辑看起来很好。我甚至有一个消息框会显示当前正在设置的X,Y,它是正确的,它不会将它们放在这些坐标上。如何使用变量定位对象

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

什么是控制(这一点),他们是被添加到? –

+0

也许将此控件添加到FlowLayoutPanel会更容易。这个控件将为你定位这些控件 – Berial

+1

如果你必须初始化x到-1700才能看到它们,那么你就有东西了。表格从0,0开始。 –

回答

0

此代码的工作,你期待

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

但是就像@Ed说我会的东西去,一个的FlowLayout控制

+0

我得到它与你的代码一起工作,但我仍然不得不改变X和Y在x = -170,y = -255初始化以使它正确定位,就像在图片。它现在正在工作,但我会调查flowlayout控制谢谢 – Mike

+0

我会用'p.Location = new Point((i%26)* 85,(i/26)* 85 );'以避免'x'&'y'变量的混乱状态,但是否则这对我来说看起来不错。 +1“FlowLayout”控件也是更好的选择。 ' – Enigmativity

1

而不是手动放置元素使用FlowLayoutPanel。将控制添加到面板并让它为您做安排。

+0

谢谢你的建议我会试试这个 – Mike

相关问题