S
S
SurelL2017-06-06 23:58:58
C++ / C#
SurelL, 2017-06-06 23:58:58

How to make pictures not disappear from picturebox?

Hello. There is a Windows Form in which - PictureBox. It draws circles when you click the mouse. The coordinates of these circles are written to the List, so that in the future, when the button is pressed, lines will be drawn between the circles in a random order.
Can you suggest how to make the drawing not disappear? It turns out that when I draw the lines already in the keypress event, all the circles are erased and just a white background remains

namespace UAV_MODELING
{
    public partial class Form1 : Form
    {
        Graphics gr;       //объявляем объект - графику, на которой будем рисовать
        Pen p;             //объявляем объект - карандаш, которым будем рисовать контур
        SolidBrush fig;    //и внутренности рисуемой фигуры
        int rad = 30;          // переменная для хранения радиуса рисуемых кругов
 
        static List<List<int>> coordinates = new List<List<int>>(); // Сюда записываем все координаты
        static List<int> usedCoordinates = new List<int>(); // Сюда записываем использованные координаты в процессе рандомного выбора
 
        public Form1()
        {
            InitializeComponent();
 
        }
 
        //опишем функцию, которая будет рисовать круг по координатам его центра
        public void DrawCircle(int x, int y)
        {
             
            gr.FillEllipse(fig, x, y, rad, rad);
 
            gr.DrawEllipse(p, x, y, rad, rad);
 
        }
 
        // Обработка события нажатия кнопки
        private void button1_Click(object sender, EventArgs e)
        {
            double speed;
            
            try
            {
                speed = Convert.ToDouble(textBox3.Text);
                setSpeed(speed);
            }
            catch
            {
                textBox3.Focus();
            }
 
            //timerMoving.Start();
 
            pictureBox1.Invalidate();
 
            gr = pictureBox1.CreateGraphics();
            p = new Pen(Color.Blue);
            
            int coordinatesNumber = coordinates.Count;
 
            Random random = new Random();
 
            int choice;
 
            int X_from = coordinates[0][0];
            int Y_from = coordinates[0][1];
            int X_to, Y_to;
            
            for (int i = 0; i < coordinatesNumber; i++)
            {
                do
                {
                    choice = random.Next(2, coordinatesNumber + 1);
                } while (!isFind(choice));
 
                X_to = coordinates[choice][0];
                Y_to = coordinates[choice][1];
 
                gr.DrawLine(p, X_from, Y_from, X_to, Y_to);
 
                usedCoordinates.Add(choice);
 
                X_from = X_to;
                Y_from = Y_to;
            }       
        }
        
        // Проверка наличия точки в списке использованных координат
        private bool isFind (int pointIndex)
        {
            foreach (int index in usedCoordinates)
            {
                if (index == pointIndex)
                    return true;
            }
            return false;
        }
 
        // Обработка события кликанья мышкой по pictureBox (для создания кругов)
        private void pictureBox1_MouseClick(object sender, MouseEventArgs e)
        {
            gr = pictureBox1.CreateGraphics();  
            p = new Pen(Color.Blue);          
            fig = new SolidBrush(Color.Blue);
 
            int CurX = e.X;
            int CurY = e.Y;
 
            DrawCircle(CurX, CurY);
 
            fig.Dispose();
            p.Dispose();
            gr.Dispose();
            List<int> point = new List<int>();
            point.Add(CurX);
            point.Add(CurY);
            coordinates.Add(point);
        }
 
    }
}

Answer the question

In order to leave comments, you need to log in

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question