在 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 映射。如何将图标(图像)放在地图上(图片框中的现有图像)?的主要内容,如果未能解决你的问题,请参考以下文章

在 Windows 窗体中创建类似控制台的信息显示

C#窗体设计——多个窗体之间的调用

在 Windows 窗体中创建条形图

如何在 Windows 窗体中创建 GDI 泄漏!

如何在 Windows 窗体应用程序中创建全局错误处理程序?

如何将我的 VBA 宏转换为 C# 以在 Windows 窗体应用程序中使用?