2011-09-02 45 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

相關問題