C#:在PictureBox中创建一个可编辑的对象

时间:2010-04-14 20:02:45

标签: c# gdi+ picturebox

我的目标是让用户点击地图上的特定位置来添加地标,然后点击其图标(更改其名称,移动它等)来编辑地标。 我正在使用PictureBox来显示地图,通过注册MouseDoubleClick事件,我使用GDI + DrawImage()方法在地图上绘制一个Image。问题是在绘制地标的图像后,它不可编辑:用户无法点击图标并移动它,更改其名称等。我可以遵循其他任何设计模式吗?也许使用其他控件......?

2 个答案:

答案 0 :(得分:1)

您可以拥有一个对象列表,每个对象都是屏幕上的地标。这些对象至少有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。

答案 1 :(得分:0)

您需要有一个分层项目的概念。将图标放在图像上时,需要将其坐标/大小存储在数组中。如果用户单击该图标,您可以根据存储的坐标检测其位置,然后允许用户选择/移动它,根据您的主背景图像+分层图标阵列重绘图像。