windows Форма refre sh - как я могу сделать это более гладким? - PullRequest
1 голос
/ 25 марта 2020

Я рисую небольшой лабиринт на форме windows и перерисовываю его при каждом событии нажатия клавиши. Как я могу сделать это более гладким? Чертеж длится ок. одну секунду, и когда вы нажимаете кнопки со стрелками, в форме появляется короткое мерцание.

        public void Draw_Labyrinth()
        {
            this.Update();
            this.SuspendLayout();

            Controls.Clear();


            for (int i = 0; i < list_Elements_Y.Count; i++)
            {

                for (int j = 0; j < list_Elements_Y[i].list_Elements_X.Count; j++)
                {

                    PictureBox pb = new PictureBox();

                    pb.Location = list_Elements_Y[i].list_Elements_X[j].position;
                    pb.Name = list_Elements_Y[i].list_Elements_X[j].name;
                    pb.Size = list_Elements_Y[i].list_Elements_X[j].size;


                    if (pb.Location == characterPosition) 
                    {
                        pb.Image = Properties.Resources.character;
                    }
                    else if (pb.Name == "item")
                    {
                        pb.Image = Properties.Resources.item;
                    }
                    else if (pb.Name == "wall")
                    {
                        pb.Image = Properties.Resources.wall;
                    }

                    Controls.Add(pb);


                    Application.DoEvents();
                    this.Update();
                }

            }

            Application.DoEvents();
            this.ResumeLayout();

        }

большое спасибо заранее!

1 Ответ

1 голос
/ 25 марта 2020

Мерцание в WinForms обычно можно устранить (или значительно улучшить), установив DoubleBuffered в true.

Это можно сделать в конструкторе VS или в конструкторе Form.

Полная секунда операций рисования кажется чрезмерной. Так что, если бы вы могли оптимизировать это, было бы неплохо.

...