2017-05-22 10 views
0

gmap.net을 사용하는 응용 프로그램을 만들었습니다. 지도에는 세 개의 마커가 있습니다. 이제 마커를 클릭하면 새로운 양식이 열리고 다른 양식을 열려면 두 번째 아이콘을 클릭하십시오. gMapControl 당신이 당신의 업체에 클릭 이벤트를 수신에 가입 할 수 OnMarkerClick라는 이벤트가 있습니다C# gmap.net google 마커

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using GMap.NET; 
using GMap.NET.MapProviders; 
using GMap.NET.WindowsForms; 
using GMap.NET.WindowsForms.Markers; 

namespace GMap 
{ 
    public partial class Form1 : Form 
    { 
     GMarkerGoogle marker; 
     GMapOverlay markerOverlay; 
     DataTable dt; 
     int Selekcija = 0; 
     double LatInicial = 43.1383292506958; 
     double LngInicial = 20.5198994278908; 
     double LatTehnicka = 43.1378458151015; 
     double LngTehnicka = 20.5214631557465; 
     double LatMedicinska = 43.1324426240355; 
     double LngMedicinska = 20.5122631788254; 

     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      dt = new DataTable(); 
      dt.Columns.Add(new DataColumn("Opis", typeof(string))); 
      dt.Columns.Add(new DataColumn("Lat", typeof(double))); 
      dt.Columns.Add(new DataColumn("Long", typeof(double))); 
      //Ubacivanje podataka u tabelu 
      dt.Rows.Add("Gimnazija", LatInicial, LngInicial); 
      dt.Rows.Add("Tehnicka skola", LatTehnicka, LngTehnicka); 
      dt.Rows.Add("Medicinska skola", LatMedicinska, LngMedicinska); 
      dataGridView1.DataSource = dt; 
      //Vidljivost pojedinih kolona 
      dataGridView1.Columns[1].Visible = false; 
      dataGridView1.Columns[2].Visible = false; 

      gMapControl1.DragButton = MouseButtons.Left; 
      gMapControl1.CanDragMap = true; 
      gMapControl1.MapProvider = GMapProviders.GoogleMap; 
      gMapControl1.Position = new PointLatLng(LatInicial, LngInicial); 
      gMapControl1.MinZoom = 0; 
      gMapControl1.MaxZoom = 24; 
      gMapControl1.Zoom = 17; 
      gMapControl1.AutoScroll = true; 
      // Obelezivac 
      markerOverlay = new GMapOverlay("markers"); 
      marker = new GMarkerGoogle(new PointLatLng(LatInicial, LngInicial),GMarkerGoogleType.green); 
      markerOverlay.Markers.Add(marker); 
      //marker.ToolTipMode = MarkerTooltipMode.Always; 
      marker.ToolTipText = string.Format("Gimnazija: \n Latituda: {0} \n  Longituda: {1}", LatInicial, LngInicial); 
      gMapControl1.Overlays.Add(markerOverlay); 

      markerOverlay = new GMapOverlay("markers"); 
      marker = new GMarkerGoogle(new PointLatLng(LatTehnicka, LngTehnicka), GMarkerGoogleType.green); 
      markerOverlay.Markers.Add(marker); 
      //marker.ToolTipMode = MarkerTooltipMode.Always; 
      marker.ToolTipText = string.Format("Tehnicka skola: \n Latituda: {0} \n Longituda: {1}", LatTehnicka, LngTehnicka); 
      gMapControl1.Overlays.Add(markerOverlay); 

      markerOverlay = new GMapOverlay("markers"); 
      marker = new GMarkerGoogle(new PointLatLng(LatMedicinska, LngMedicinska), GMarkerGoogleType.green); 
      markerOverlay.Markers.Add(marker); 
      //marker.ToolTipMode = MarkerTooltipMode.Always; 
      marker.ToolTipText = string.Format("Medicinska skola: \n Latituda: {0} \n Longituda: {1}", LatMedicinska, LngMedicinska); 
      gMapControl1.Overlays.Add(markerOverlay); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      dt.Rows.Add(txtOpis.Text, txtLatituda.Text, txtLongituda.Text); 
     } 

     private void SelekcijaSkole(object sender, DataGridViewCellMouseEventArgs e) 
     { 
      Selekcija = e.RowIndex; 
      txtOpis.Text = dataGridView1.Rows[Selekcija].Cells[0].Value.ToString(); 
      txtLatituda.Text = dataGridView1.Rows[Selekcija].Cells[1].Value.ToString(); 
      txtLongituda.Text = dataGridView1.Rows[Selekcija].Cells[2].Value.ToString(); 
      marker.Position = new PointLatLng(Convert.ToDouble(txtLatituda.Text), Convert.ToDouble(txtLongituda.Text)); 
      gMapControl1.Position = marker.Position; 
     } 

     private void gMapControl1_MouseDoubleClick(object sender, MouseEventArgs e) 
     { 
      double lat = gMapControl1.FromLocalToLatLng(e.X, e.Y).Lat; 
      double lng = gMapControl1.FromLocalToLatLng(e.X, e.Y).Lng; 
      txtLatituda.Text = lat.ToString(); 
      txtLongituda.Text = lng.ToString(); 
      marker.Position = new PointLatLng(lat, lng); 
      marker.ToolTipText = string.Format("Koordinate: \n Latituda {0} \n Longituda {1}", lat, lng); 
     } 

     private void button2_Click(object sender, EventArgs e) 
     { 
      dataGridView1.Rows.RemoveAt(Selekcija); 
     } 

     private void button3_Click(object sender, EventArgs e) 
     { 
      gMapControl1.MapProvider = GMapProviders.GoogleChinaSatelliteMap; 
     } 

     private void button4_Click(object sender, EventArgs e) 
     { 
      gMapControl1.MapProvider = GMapProviders.GoogleMap; 
     } 

     private void button5_Click(object sender, EventArgs e) 
     { 
      gMapControl1.MapProvider = GMapProviders.GoogleTerrainMap; 
     } 

     private void gMapControl1_OnMarkerClick(GMapMarker item, MouseEventArgs e) 
     { 

     } 
    } 
} 
+0

질문은 무엇입니까? – Paolo

+0

세 가지 다른 마커의 좌표 (위도와 경도)를 통해 마커를 클릭하여 폼을 열고 두 번째 마커를 클릭하여 다른 폼을 열고 세 번째 마커를 클릭하여 세 번째 폼을 엽니 다. 세 가지 형태 모두 서로 다릅니다. http://imgur.com/a/DoSTr –

+0

내 대답이 도움이 되었습니까? 그렇다면 질문에 답을 표시해주십시오. – Bearcat9425

답변

0

:이 코드입니다. GmapControl을 마우스 오른쪽 버튼으로 클릭 한 다음 속성을 선택할 수 있습니다. 그런 다음 조명 버튼을 클릭하면 이벤트 목록이 표시되고 OnMarkerClick 이벤트가 두 번 클릭하면 이벤트 처리기가 작성되거나 그렇게 설정할 수 있습니다.

gMapControl1.OnMarkerClick += (marker, mouseArgs) => 
{ 
    // From this point marker is the clicked marker do as you wish here 
    // Pass it to another form and use form.show to display the form. 
    // MessageBox.Show is to show proof the event fired. 
    MessageBox.Show(marker.ToolTipText); 
    // If you have a marker form you can display it like so. 
    MarkerForm form = new MarkerForm(); 
    form.Show(); 
};