在 Windows 窗体 C# 中创建 POI 映射。如何将图标(图像)放在地图上(图片框中的现有图像)?
Posted
技术标签:
【中文标题】在 Windows 窗体 C# 中创建 POI 映射。如何将图标(图像)放在地图上(图片框中的现有图像)?【英文标题】:Creating a POI map in Windows Forms C#. How can I put icon (image) over a map (existing image in picturebox)? 【发布时间】:2016-10-21 12:32:14 【问题描述】:我正在做一个学校项目,我需要创建一个POI
地图。我会这样做:我需要在picturebox
控件中加载一张图片(某个地方的地图,它可以只是从鸟的角度看体育场的图像),然后在picturebox
上进行点击事件以获取坐标,并在该坐标上放置另一个图像(例如一些小的自定义图标等)。
当然,在放置该图像时,我不想替换picturebox
中的现有图像(地图),而是在现有图像上制作一张图像。此外,我需要记住稍后将这些“POI 图标”放在数据库中的位置,但这不是这个问题的一部分。
你们怎么看,是否有可能做到这一点(图像,具有特定坐标,在另一个已经填充picturebox
的图像上)或者我需要另一个“想法”来解决我的问题?如果可能的话,我该怎么做(非常感谢带有示例的代码)?如果不可能,您能否给我一些建议(其他 WinForms 控件、其他事件等)如何做不同的事情?提前感谢您并原谅语法错误。
【问题讨论】:
【参考方案1】:试试这个(抱歉我的英语不好):
public partial class Form1 : Form
public Form1()
//InitializeComponent();
Width = 800;
Height = 600;
pictureBox = new PictureBox Parent = this, Dock = DockStyle.Top, Height = 500 ;
pictureBox.ImageLocation = "pic.jpg";
pictureBox.Click += PictureBox_Click;
PictureBox pictureBox;
List<Point> points = new List<Point>();
private void PictureBox_Click(object sender, EventArgs e)
var point = pictureBox.PointToClient(MousePosition);
points.Add(point);
var iconBox = new PictureBox Parent = pictureBox, Location = point, Size = new Size(32, 32) ;
iconBox.Image = SystemIcons.Hand.ToBitmap();
iconBox.Click += IconBox_Click;
private void IconBox_Click(object sender, EventArgs e)
var pb = (PictureBox)sender;
points.Remove(pb.Location);
pb.Parent = null;
pb.Click -= IconBox_Click;
pb.Dispose();
在Click
事件处理程序中,我们创建一个新的PictureBox
并将其放在主PictureBox
上。为他设置所需的图像(为简单起见,我使用了系统图标)。
还为每个新的PictureBox
添加一个单击处理程序,以便通过鼠标单击将其删除。在其处理程序中,我们从列表和父控件中删除了不必要的PictureBox
。取消订阅活动。然后丢弃它。
您可以将点列表保存到数据库或文件中。
【讨论】:
以上是关于在 Windows 窗体 C# 中创建 POI 映射。如何将图标(图像)放在地图上(图片框中的现有图像)?的主要内容,如果未能解决你的问题,请参考以下文章