Как рисовать в Windows Forms на динамически создаваемых объектах через graphics
Я пишу учебный проект, а именно морской бой. Все это дело пишется на Windows Forms. Так как в приложении внутри одной формы будет несколько меню, между которыми между переходить, все объекты Control создаются динамически. Непосредственно в игровом меню имеются 2 поля, на которых будет осуществляться игра - поле игрока и бота, реализованных через PictureBox-ы. Когда я реализую прорисовку на поле через следующее метод и подключаю его к событиям Paint для обоих полей, все рисуется нормально, соответствующими цветами помечаются поля по определенной внутренней логике. Но, т.к. мне нужно добавить еще и некоторую анимацию при стрельбе по полю, мне, по идее, нужно включить двойную буферизацию для моих PictureBox, а для этого, по идее, надо реализовать отдельный метод, который напрямую будет вызывать заранее созданный объект graphics с подключенной к нему двойной буферизацией. Данный метод, в дальнейшем, вызывается в таймере. И вот тогда, все работать перестает.
Вот метод рисования через событие:
public void Fill_Color(object sender, PaintEventArgs e)
{
Point Size = this.Size_of_field;
Point Loc;
SolidBrush colorBrush;
Pen colorPen = new Pen(Color.Black);
Rectangle help_rect;
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
Loc = new Point( i * Size.X,
j * Size.Y);
help_rect = new Rectangle(Loc, (Size)Size);
if (this.check_color_to_draw(new Point(i, j)))
{
if (this.temp_placement_points.Item4)
{
colorBrush = new SolidBrush(Color.Purple);
}
else
{
colorBrush = new SolidBrush(Color.Red);
}
}
else
{
colorBrush = new SolidBrush(this.rectangles[i, j].Color);
}
e.Graphics.FillRectangle(colorBrush, help_rect);
e.Graphics.DrawRectangle(colorPen, help_rect);
}
}
}
А вот рисование вторым способом:
Конструктор(..какие-то аргументы){
какой-то код...
currentContext = BufferedGraphicsManager.Current;
myBuffer = currentContext.Allocate(panel1.CreateGraphics(),
panel1.DisplayRectangle);
graphics = myBuffer.Graphics;
}
А вот и сам метод:
public void Fill_Color2()
{
Point Size = this.Size_of_field;
Point Loc;
SolidBrush colorBrush;
Pen colorPen = new Pen(Color.Black);
Rectangle help_rect;
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
Loc = new Point(i * Size.X,
j * Size.Y);
help_rect = new Rectangle(Loc, (Size)Size);
if (this.check_color_to_draw(new Point(i, j)))
{
if (this.temp_placement_points.Item4)
{
colorBrush = new SolidBrush(Color.Purple);
}
else
{
colorBrush = new SolidBrush(Color.Red);
}
}
else
{
colorBrush = new SolidBrush(this.rectangles[i, j].Color);
}
this.graphics.FillRectangle(colorBrush, help_rect);
this.graphics.DrawRectangle(colorPen, help_rect);
}
}
}
Хотелось бы услышать как это исправить, и что вообще у меня не так. Потому что примерно такой же код для статических объектов работает нормально. Заранее спасибо!