Перемещение изображения по панели - C#

Формулировка задачи:

Я пытаюсь менять место положения метки на панели при захвате его мышью. Всё бы хорошо, но перемещать я его могу почему-то только вниз и вправо. Можете подсказать почему?
private void panel1_MouseMove(object sender, MouseEventArgs e)
        {
            base.OnMouseMove(e);
            if ((e.Button & MouseButtons.Left) == MouseButtons.Left)
            {
                for (int i = 0; i < marks.Count; i++)
                {
                    rect = new Rectangle(marks[i].X, marks[i].Y, marks[i].Image.Width / 2, marks[i].Image.Height / 2);
 
                    if (rect.Contains(e.Location))
                    {
                        marks[i].X = e.X;
                        marks[i].Y = e.Y;
                    }
                    panel1.Refresh();
                }
            }
        }
Добавлено через 6 минут И сразу спрошу, может кто подскажет.. Как нужно перемещать эту метку при изменении масштаба панели, чтобы она сохранялась на месте относительно фонового изображения? То есть, если я, например, ставлю фоном карту и метку в районе реки, то при изменении масштаба карты эта метка с реки съезжает. Разве что карта попадётся идеально квадратная..

Код к задаче: «Перемещение изображения по панели - C#»

textual
            double w = panel1.Width / 10;
            double h = panel1.Height / 10;
            panel1.Width -= Convert.ToInt16(w);
            panel1.Height -= Convert.ToInt16(h);
            foreach (Mark m in marks)
            {
                m.X -= Convert.ToInt16(w/2);
                m.Y -= Convert.ToInt16(h/2);
            }

9   голосов, оценка 4.111 из 5


СОХРАНИТЬ ССЫЛКУ