C # Графика не рисует прямоугольники, где это необходимо - PullRequest
1 голос
/ 28 марта 2019

Я создаю графическую форму, в которой объекты с координатами x, y рисуются в графике.Он работает правильно для маленьких x и y, но когда я хочу нарисовать их в другом месте (например, x = 500, y = 300), они исчезают.

 public WindowHandler()
        {
            dc = this.CreateGraphics();

            this.Size = new Size(sizeX, sizeY); // 800x600
            startSimulation = new Button
            {
                // button properties
            };

            this.Controls.Add(startSimulation);
            startSimulation.Click += new EventHandler(StartSimulationClick);

        }

        private void CreationsMethods()
        {
            creations.PaintAllAnimals(dc);
        }

        public void PaintAllAnimals(Graphics g)
        {
            foreach (var animal in ecoStructure.world.animals)
            {
                animal.PaintAnimal(g);
            }
        }

        public void PaintAnimal(Graphics graphics)
        {
            Rectangle rectangle = new Rectangle(x, y, 3, 3);
            Pen pen = new Pen(colour);
            graphics.DrawRectangle(pen, rectangle);
            graphics.FillRectangle(colour, rectangle);
        }

Я хочу поместить все объекты наокно.Есть ли способ сделать графику «больше»?Мне нужно сделать еще один?Или я должен использовать другой инструмент для рисования прямоугольников?

1 Ответ

0 голосов
/ 28 марта 2019

Спасибо @Chris Dunaway за публикацию ответа в комментарии. Поэтому я удалил CreateCraphics, и вместо этого я сейчас использую метод OnPaint. Работает медленно, но работает. Поэтому я постараюсь сделать это как можно быстрее. На данный момент я только что создал это. NextStepClick - это то, как я использую OnPaint для рисования прямоугольников.

private void CreationsMethods(object sender, PaintEventArgs e)
        {
            dc = e.Graphics;
            base.OnPaint(e);
            creations.PaintAllAnimals(dc);
        }
private void NextStepClick(object sender, EventArgs e)
        {
            this.Refresh();
            picBox.Paint += new System.Windows.Forms.PaintEventHandler(CreationsMethods);
        }

...