所以我试图将MasterMind程序作为一种练习。
当我按下其中一个按钮(假设红色按钮)时,图片框变为红色
我的问题是如何通过所有这些图片框进行迭代?
我可以让它工作,但只有我写:
而且这是从来没有办法写这个,会带给我无数基本相同的行。
private void picRood_Click(object sender, EventArgs e)
{
UpdateDisplay();
pb1.BackColor = System.Drawing.Color.Red;
}
按红色按钮 - >第一个图片框变成红色
按蓝色按钮 - >第二个图片框变蓝
按橙色按钮 - >第三个图片框变成橙色
等等...
我有一个模拟交通信号灯的类似程序,我可以为每种颜色分配一个值(红色0,橙色1,绿色2)。
是否需要类似的东西,或者我如何确切地对齐所有这些图片框并使它们与正确的按钮相对应。
最诚挚的问候。
答案 0 :(得分: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
}
答案 1 :(得分:0)
我会使用面板作为所有图片框的容器控件,然后:
foreach (PictureBox pic in myPanel.Controls)
{
// do something to set a color
// buttons can set an enum representing a hex value for color maybe...???
}
答案 2 :(得分:0)
我不会使用picturebox,而是使用单个图片框,使用GDI直接绘制到它上面。结果要快很多,它会让你编写更复杂的游戏,包括精灵和动画;)
学习如何很容易。