【问题标题】:C#: Creating an editable object inside a PictureBoxC#:在 PictureBox 内创建可编辑对象
【发布时间】:2010-04-14 20:02:44
【问题描述】:

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

【问题讨论】:

  • 你在“它不可编辑”中迷失了我。编辑任何东西都需要代码。

标签: c# gdi+ picturebox


【解决方案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;
      }
 }

因此您可以更改该对象和 Invalidate() Picturebox 的属性 X 和 Y。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2013-06-06
      • 2015-06-27
      • 2014-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-07
      • 2020-02-27
      相关资源
      最近更新 更多