Я делаю небольшую игру Reversi/Othello, и внутри моего метода рисования доски у меня есть вложенный цикл for для отображения сетки PictureBox, в каждом из которых есть изображение.
При первом вызове метода все PictureBox создаются правильно, а изображения помещаются внутрь. Однако, если я затем снова вызову метод, я не смогу перезаписать изображения, которые уже есть.
Я некоторое время занимался исследованиями, и, насколько я понимаю, это может быть связано с блокировкой PictureBox или с необходимостью правильно Dispose() PictureBox перед записью в него другого изображения. Я не мог заставить работать какое-либо из этих решений, поэтому любая конкретная помощь будет очень признательна!
private void Draw()
{
Bitmap White = Properties.Resources.white;
Bitmap Black = Properties.Resources.black;
Bitmap None = Properties.Resources.none;
for (int r = 0; r <= grid.GetUpperBound(0); r++)
{
for (int c = 0; c <= grid.GetUpperBound(0); c++)
{
if (grid[r, c].value == 1)
{
var picbox = new PictureBox() // initialise picturebox for displaying images
{
Name = grid[r, c].name,
Size = new Size(64, 64),
Location = new Point(r * 65 + 15, c * 65 + 60),
Text = grid[r, c].name,
Image = White
};
Controls.Add(picbox); // add picturebox to form
picbox.Click += ClickBox;
MessageBox.Show("white draw" + grid[r, c].name);
}
if (grid[r, c].value == -1)
{
var picbox = new PictureBox()
{
Name = grid[r, c].name,
Size = new Size(64, 64),
Location = new Point(r * 65 + 15, c * 65 + 60),
Text = grid[r, c].name,
Image = Black
};
Controls.Add(picbox);
picbox.Click += ClickBox;
MessageBox.Show("black draw" + grid[r, c].name);
}
if (grid[r, c].value == 0)
{
var picbox = new PictureBox()
{
Name = grid[r, c].name,
Size = new Size(64, 64),
Location = new Point(r * 65 + 15, c * 65 + 60),
Text = grid[r, c].name,
Image = None
};
Controls.Add(picbox);
picbox.Click += ClickBox;
}
}
}
}
grid
? - person Valentin   schedule 11.04.2016Location = new Point(r * 65 + 15, c * 65 + 60)
- person Valentin   schedule 11.04.2016PictureBox pb = Controls["cellname"] as PictureBox;
- person LarsTech   schedule 11.04.2016Private PictureBox[,] picBoxArray;
Затем создайте этот массив только один раз. Затем обратитесь к нему позже черезpicBoxArray[3, 4].Image = <code here for new image object>;
Что-то в этом роде. - person ManoDestra   schedule 11.04.2016