C# стирание графики с помощью списка
У меня есть функция, которая не всегда работает. Когда левая кнопка мыши нажата и удерживается, и вы перетаскиваете изображение, оно удаляет точки, хранящиеся в 2D-списке, и перерисовывает другие графики. Он отлично работает при установке его на событие MouseUp m, но при вызове в событии MouseMove он будет работать, если я свирепо наведу курсор мыши на изображение, которое в конечном итоге удалит его. Может быть, это проблема с недостаточно быстрым циклом??
private void Canvas_Panel_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e) { if (e.Button == MouseButtons.Left) { if (iamPainting) { Pen p = new Pen(Color.Black, float.Parse("2")); g.DrawLine(p, new Point(initX ?? e.X, initY ?? e.Y), new Point(e.X, e.Y)); Lines2[theSize].Add(new Point(initX ?? e.X, initY ?? e.Y)); Lines2[theSize].Add(new Point(e.X, e.Y)); } else if (isErase) { Console.WriteLine("Erase: " + e.X.ToString() + " " + e.Y.ToString()); int indexToRemove = 0; Boolean timetoBreak = false; for (int i = 0; i < Lines2.Count; i++) { for (int i2 = Lines2[i].Count - 1; i2 > 0; i2--) { if (e.X == Lines2[i][i2].X && e.Y == Lines2[i][i2].Y) //if (e.X >= Lines2[i][i2].X - 2 && (e.X + 2) <= Lines2[i][i2].X + 2 && e.Y >= Lines2[i][i2].Y - 2 && (e.Y + 2) <= Lines2[i][i2].Y + 2) { indexToRemove = i; timetoBreak = true; break; } if (timetoBreak) break; } } if (timetoBreak) { Lines2.RemoveAt(indexToRemove); theSize -= 1; Canvas_Panel.Refresh(); } } initX = e.X; initY = e.Y; } }
Что я уже пробовал:
Я пробовал разные циклы, используя разные события, но на самом деле ничего не работает.