2010-04-15 102 views
3

所以我試圖做一個MasterMind程序作爲一種練習。窗體顏色變化

  • 場的40圖片框(第4行,10行)
  • 6按鍵(紅,綠,橙,黃,藍,紫)

在按下這些按鈕中的一個(讓我們假設紅色),然後一個圖片框變成紅色。
我的問題是我如何迭代槽所有這些圖片框?
我可以得到它的工作,但只有當我寫:
而這是offcourse沒有辦法寫這個,會帶我無數包含基本相同的行。

 private void picRood_Click(object sender, EventArgs e) 
    { 
     UpdateDisplay(); 
     pb1.BackColor = System.Drawing.Color.Red; 
    } 

按下紅色按鈕 - >第一個圖片框變爲紅色
按下藍色按鈕 - >第二個圖片框變爲藍色
按下橙色按鈕 - >第三圖片框變爲橙色
等。 ..

我曾經有一個類似的程序,模擬交通燈,我可以爲每種顏色(紅色0,橙色1,綠色2)分配一個值。
是類似的東西需要或我如何處理所有這些圖片框,並使其對應於正確的按鈕。

最好的問候。

回答

0

我會用一個面板作爲所有PIC盒容器控制,則:

foreach (PictureBox pic in myPanel.Controls) 
{ 
    // do something to set a color 
    // buttons can set an enum representing a hex value for color maybe...??? 
} 
0

我不會用pictureboxes,而是將使用單一的PictureBox,使用GDI直接繪製到其上。其結果是更快,它會讓你寫更復雜的遊戲,涉及精靈和動畫;)

這是很容易學習如何。

+0

真的不知道你在說什麼,它會如何簡單的是什麼=)。 – Sef 2010-04-15 15:55:38

1

我不會使用控件,而是可以使用單個PictureBox並處理Paint事件。這使您可以在該PictureBox內繪製,以便快速處理所有框。

在代碼:

// define a class to help us manage our grid 
public class GridItem { 
    public Rectangle Bounds {get; set;} 
    public Brush Fill {get; set;} 
} 

// somewhere in your initialization code ie: the form's constructor 
public MyForm() { 
    // create your collection of grid items 
    gridItems = new List<GridItem>(4 * 10); // width * height 
    for (int y = 0; y < 10; y++) { 
     for (int x = 0; x < 4; x++) { 
      gridItems.Add(new GridItem() { 
       Bounds = new Rectangle(x * boxWidth, y * boxHeight, boxWidth, boxHeight), 
       Fill = Brushes.Red // or whatever color you want 
      }); 
     } 
    } 
} 

// make sure you've attached this to your pictureBox's Paint event 
private void PictureBoxPaint(object sender, PaintEventArgs e) { 
    // paint all your grid items 
    foreach (GridItem item in gridItems) { 
     e.Graphics.FillRectangle(item.Fill, item.Bounds); 
    } 
} 

// now if you want to change the color of a box 
private void OnClickBlue(object sender, EventArgs e) { 
    // if you need to set a certain box at row,column use: 
    // index = column + row * 4 
    gridItems[2].Fill = Brushes.Blue; 
    pictureBox.Invalidate(); // we need to repaint the picturebox 
}