我的目标是让用户点击地图上的特定位置来添加地标,然后点击其图标(更改其名称,移动它等)来编辑地标。 我正在使用PictureBox来显示地图,通过注册MouseDoubleClick事件,我使用GDI + DrawImage()方法在地图上绘制一个Image。问题是在绘制地标的图像后,它不可编辑:用户无法点击图标并移动它,更改其名称等。我可以遵循其他任何设计模式吗?也许使用其他控件......?
答案 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)
您需要有一个分层项目的概念。将图标放在图像上时,需要将其坐标/大小存储在数组中。如果用户单击该图标,您可以根据存储的坐标检测其位置,然后允许用户选择/移动它,根据您的主背景图像+分层图标阵列重绘图像。