2016-06-20 3 views
0

저는 학교 프로젝트를 진행 중이며 POI지도를 만들어야하는 작업이 있습니다. 이것은 내가 어떻게 할 것인가이다. 나는 picturebox 컨트롤에 그림 (어떤 장소의지도, 그것은 새 관점에서 경기장의 이미지 일 수있다)을로드해야하고, picturebox에 click 이벤트가있어서 좌표를 가져온다. 다른 이미지 (일부 작은 사용자 정의 아이콘 등)를 조정합니다.Windows Forms C#에서 POI 맵 만들기. 지도 (그림 상자에있는 기존 이미지) 위에 아이콘 (이미지)을 삽입하려면 어떻게해야합니까?

물론 이미지를 넣는 동안 기존 이미지 (지도)를 picturebox으로 바꾸지 않고 기존 이미지 위에 하나의 이미지를 만들 것을 권장합니다. 또한, 나는 나중에 "POI 아이콘"을 데이터베이스에 저장하는 것을 기억해야 할 것이다. 그러나 그것은이 문제의 일부가 아니다. 당신은 어떻게 생각하십니까, (이미지가 특정 좌표로 이미 picturebox으로 채워진 다른 이미지보다) 가능합니까 아니면 내 문제를 해결하는 방법을 다른 "아이디어"로 만들어야합니까? 가능하다면 어떻게 할 수 있습니까 (예제 코드는 매우 높이 평가할 것입니다)? 가능하지 않다면 다른 방법 (다른 WinForms 컨트롤, 다른 이벤트 등)을 수행하는 방법에 대해 조언을 해줄 수 있습니까? 미리 감사 드리며 문법적인 실수를 용서해주십시오.

답변

0

이 (내 나쁜 영어 죄송합니다) 시도합니다 Click 이벤트 핸들러에서

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(); 
    } 
} 

우리가 새로운 PictureBox를 작성하고 주요 PictureBox에 넣어. 그에게 원하는 이미지를 설정하십시오 (단순화를 위해 시스템 아이콘을 사용했습니다).

또한 각 새 PictureBox에 대한 클릭 핸들러를 추가하여 마우스 클릭으로 제거하십시오. 핸들러에서 제거 할 항목은 목록 및 상위 컨트롤에서 불필요하게되었습니다 (PictureBox). 이벤트 구독을 취소하십시오. 그런 다음 그것을 처분하십시오.

포인트 목록을 데이터베이스 또는 파일에 저장할 수 있습니다.