C #: создание редактируемого объекта внутри PictureBox - PullRequest
0 голосов
/ 15 апреля 2010

Моя цель - позволить пользователю щелкнуть определенное место на карте, чтобы добавить метку, а затем отредактировать метку, щелкнув ее значок (изменить его имя, переместить его и т. Д.). Я использую PictureBox, чтобы показать карту, и, регистрируя событие MouseDoubleClick, я рисую изображение на карте с помощью метода GDI + DrawImage (). Проблема в том, что после того, как изображение метки было нарисовано, оно не может быть отредактировано: пользователь не может щелкнуть значок и переместить его, изменить его имя и т. Д. Есть ли другой шаблон дизайна, которому я могу следовать? может быть, используя другие элементы управления ...?

Ответы [ 2 ]

1 голос
/ 15 апреля 2010

У вас может быть список объектов, каждый из которых является меткой на вашем экране. эти объекты имеют как минимум 2 свойства X и Y и метод public bool Contain(int x, int y), который говорит, что этот объект содержит эту точку или нет.

 public class placemark
 {
      public int X;
      public int Y;

      public bool Contain(int x, int y)
      {
           // some logic here
           return true;
      }
 }

Когда пользователь нажимает на экран, с помощью цикла foreach проверьте, что каждый объект содержит положение мыши, чтобы найти объект, который пользователь хочет выбрать.

 foreach(var placemark in placeMarkList)
 {
      if (placemark.Contain(e.x,e.y))
      {
           placemark.X+=e.x-oldx;
           placemark.X+=e.y-oldy;
      }
 }

Таким образом, вы можете изменить свойства X и Y этого объекта и Invalidate () Picturebox.

0 голосов
/ 15 апреля 2010

У вас должна быть концепция наложения элементов. Когда вы размещаете этот значок на изображении, вам нужно сохранить его координаты / размер в массиве. Если пользователь щелкает значок, вы можете определить его местоположение на основе сохраненных координат, а затем разрешить пользователю выбирать / перемещать его, перерисовывая изображение при этом, основываясь на вашем основном фоновом изображении + многослойном массиве значков.

...