Създавам малка игра Reversi/Othello и в моя метод за рисуване на дъската имам вложен for цикъл за показване на решетка от PictureBoxes, всяка с изображение.
При първото извикване на метода всички PictureBoxes се създават правилно и изображенията се поставят вътре. Но ако след това извикам метода отново, не мога да презапиша изображенията, които вече са там.
Проучвах известно време и доколкото разбирам, може да има нещо общо със заключването на 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