0

我正在做一个学校项目,我需要创建一个POI地图。我会这样做:我需要加载一张图片(某个地方的地图,它可以只是从鸟类角度看体育场的图像)picturebox,然后有一个点击事件picturebox来获取坐标,然后放上那个坐标另一个图像(如一些小的自定义图标等)。

当然,在放置该图像时,我不想替换现有图像(地图)picturebox,而是在现有图像上制作一张图像。另外,我需要记住稍后在数据库中放置这些“POI 图标”的位置,但这不是这个问题的一部分。你们怎么看,是否可以这样做(图像,具有特定坐标,在另一个已经填充的图像上picturebox)或者我需要另一个“想法”如何解决我的问题?如果可能的话,我该怎么做(非常感谢带有示例的代码)?如果不可能,您能否给我一些建议(其他 WinForms 控件、其他事件等)如何做不同的事情?提前感谢您并原谅语法错误。

4

1 回答 1

0

试试这个(对不起我的英语不好):

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并将其放在 main 上PictureBox。为他设置所需的图像(为简单起见,我使用了系统图标)。

还为每个 new 添加一个单击处理程序PictureBox,以通过鼠标单击将其删除。PictureBox在其处理程序中,我们从列表和父控件中删除变得不必要。取消订阅活动。然后将其丢弃。

您可以将点列表保存到数据库或文件中。

于 2016-06-20T13:46:54.063 回答