Gmap.net для удаления маркера

я использую GMap.NET код для карт и маркеров. Добавление маркеров и делать что-либо с картой не было проблемой его удаление одного маркера с карты у меня возникли проблемы. Я исследовал везде в Google, чтобы удалить маркер с карты, но удаление маркера не кажется горячей темой.

вот фрагмент кода, который я использую, чтобы добавить.

        private void AddMarker_ButtonClick(object sender, AddMarkerEventArgs e)
    {
        DBDictAdd("Marker", " ",e.Latitude, e.Longitude, true, "192.168.1.1");
        m_dbMarkers.Insert(_table, dbmarkertable);
        dbmarkertable.Clear();
        GMarkerGoogle marker = new GMarkerGoogle(new PointLatLng(e.Latitude, e.Longitude),
              GMarkerGoogleType.green);
        marker.ToolTip = new GMapRoundedToolTip(marker);
        marker.ToolTipMode = MarkerTooltipMode.OnMouseOver;
        marker.Tag = MarkerIndex;
        marker.ToolTipText = (marker.Position.ToString());
        markersOverlay.Markers.Add(marker);
        MarkerIndex++;
    }

как вы можете видеть, я использую SQLite для хранения ID и другая информация в база данных для маркеров. Я использую подход базы данных, потому что мне нужно будет хранить больше информации с местоположением маркера. Эта часть кода работает.

проблема, с которой я сталкиваюсь, - это вызов информации о маркере, чтобы я мог ее удалить. Я знаю, что эти 2 вызова существуют.

markersOverlay.Markers.Remove();
markersOverlay.Markers.RemoveAt();

я использовал removeAt команда, но я должен был сделать это вручную и заметил, используя removeAt(0) команда берет его из первой записи этого массива каждый раз.

это то, что я пробовали до сих пор:

private void uxRemoveMarkerButton_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Select the marker to remove.");
            uxGmap.OnMarkerClick += new MarkerClick(uxGmap_OnMarkerClick);

        }

        private void uxGmap_OnMarkerClick(object sender, EventArgs e)
        {
            //int? mID = null;
            //DataTable da = m_dbMarkers.GetDataTable("SELECT * from markers");
            //GMapMarker marker = null;
            //PointLatLng p = new PointLatLng(lat, lng);
            //foreach (GMapMarker m in markersOverlay.Markers)
            //{
            //    if (m.Position == p)
            //        marker = m;
            //}
            //markersOverlay.Markers.Remove(marker);
            //MessageBox.Show("done");
            //foreach (DataRow dr in da.Rows)
            //{
            //    if (Convert.ToDouble(dr[3]) == lat)
            //    {
            //        MessageBox.Show(dr[3].ToString());
            //        //mID = Convert.ToInt32(dr[0]);
            //    }
            //}
            //markersOverlay.Markers.IndexOf(marker);

            //mID= Convert.ToInt32(m_dbMarkers.ExecuteScalar("SELECT ID FROM markers"));
            //m_dbMarkers.Delete(_table, String.Format("markers.ID = {0} ", mID));
            //markersOverlay.Markers.RemoveAt(mID);
            //MessageBox.Show(mID.ToString());
            uxGmap.OnMarkerClick -= new MarkerClick(uxGmap_OnMarkerClick);

        }

любые предложения или рекомендации о том, как я могу получить идентификатор маркера или сам маркер, когда я нажимаю на него, чтобы фактически удалить его с карты?

EDIT: Я обновил AddMarker_ButtonClick

1 ответов


решение, которое я узнал, чтобы удалить маркер с карты:

GMap.Net имеет MarkerClick событие, на которое вы можете подписаться. В моей форме это код, который я использовал и где я разместил его в виде кода.

Public Form1()
    {
            uxGmap.OnMarkerClick += new MarkerClick(uxGmap_OnMarkerClick);
    }

код внутри uxGmap_OnMarkerClick

private void uxGmap_OnMarkerClick(GMapMarker item, MouseEventArgs e)
    {
        currentMarker = item;
        uxRemoveMarkerButton.Enabled = true;
    }

у меня есть глобальный GMapMarker под названием currentMarker что хранит item маркер, который вы щелкнули. Я также включаю кнопку, чтобы удалить маркер на моей форме.

тогда я использую нажмите кнопку, чтобы удалить маркер с карты через:

private void uxRemoveMarkerButton_Click(object sender, EventArgs e)
    {
            int? mID = null;
            if(currentMarker != null)
            {
                mID = Convert.ToInt32(currentMarker.Tag);
                markersOverlay.Markers.Remove(currentMarker);
                currentMarker = null;
            }
            m_dbMarkers.Delete(_table, String.Format("markers.ID = {0} ", mID));
            uxRemoveMarkerButton.Enabled = false;
     }

на GMapMarker есть Tag свойство, где я могу сохранить идентификатор маркера для маркера. Затем я извлекаю этот идентификатор из моего global currentMarker.Tag и сохраните его в локальном int mID. Я использую это mID чтобы удалить строку с идентификатором маркера, который я сохранил в базе данных sqlite. Я также отключаю кнопку, чтобы не допускать ошибок пользователя до нажатия маркера.