Chcę stworzyć program wprawkę, w wielkim skrócie ma to wyglądać tak, że rysuję na panelu szereg punktów, kiedy kliknę na jeden z nich i przytrzymam wcisniety klawisz myszy, chce go przesuwać po panelu (przerysowwywanie panelu podczas MouseMove), kiedy puszczę punkt klawisz myszy, punkt zostaje na ostatniej pozycji z MouseMove i pozostaje statyczny obraz.
Mam problem z obsługą tego algorytmu, poniżej to co wymyśliłem,
private void ObszarRysowania_MouseDown(object sender, MouseEventArgs e)
{
for (int i = 0; i < punktyNarysowane.Count; i++)
{
double wynik = 0;
wynik = ObliczOdlegloscMiedzyPunktami(e.X, punktyNarysowane[i].WspX, e.Y, punktyNarysowane[i].WspY);
if (wynik <= czuloscTrafienia)
{
TrafionyPunkt = punktyNarysowane[i];
break;
}
}
}
private double ObliczOdlegloscMiedzyPunktami(double x1, double x2, double y1, double y2)
{
return Math.Sqrt(Math.Pow((x1 - x2), 2) + Math.Pow((y1 - y2), 2));
}
private void ObszarRysowania_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left) //czy to to samo co sprawdzić czy lewy klawisz jest nadal wciśnięty??
{
TrafionyPunkt.WspX = e.X;
TrafionyPunkt.WspY = e.Y;
NarysujZadanePunkty();
}
TBcursorPosX.Text = e.Location.X.ToString();
TBcursorPosY.Text = e.Location.Y.ToString();
}
private void ObszarRysowania_MouseUp(object sender, MouseEventArgs e)
{
TrafionyPunkt = null;
}
Ale nie wiem czy to powyżej działa ponieważ, w chwili gdy kliknę na jakiś punkt program wywala mi błąd w klasie Punkt w metodzie Rysuj w linii:
g.FillEllipse(sb, WspX - 3, WspY - 3, 6, 6); // <-- Parameter is not valid (Argument Exception was UnHandled)
g.DrawString(this.ToString(), f, sb, new Point(WspX - 20, WspY - 15));
Nie wiem o co chodzi bo podczas startu programu, rysuje wszystkie punkty OK, dopiero gdy na któryś kliknę, całość zatrzymuje mi się na tej włsśnie lini, prosiłbym o nakierowanie na źródło problemu.