Как рисовать в 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);
                    }
                }
            }

Хотелось бы услышать как это исправить, и что вообще у меня не так. Потому что примерно такой же код для статических объектов работает нормально. Заранее спасибо!


Ответы (0 шт):