Здравствуйте. Есть Windows Form, в которой - PictureBox. В нем рисуются круги при нажатии мышью. Координаты этих кругов записываются в List, чтобы в дальнейшем, при нажатии кнопки между кругами вырисовывались линии в рандомном порядке.
Сможете ли Вы подсказать, как сделать так, чтобы рисунок не исчезал? Получается, когда я прорисовываю линии уже в событии нажатия на клавишу, все круги стираются и остается просто белый фон
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);
}
}
}