c# - Gmap.net 标记删除

标签 c# sqlite marker gmap.net

我正在为 map 和标记使用 GMap.NET 代码。添加标记和对 map 做任何事情都不是问题,它从我遇到问题的 map 中删除单个标记。我在 Google 上到处研究以从 map 上删除标记,但删除标记似乎并不是一个热门话题。

这是我用来添加的代码片段。

        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++;
    }

如您所见,我正在使用 SQLiteID 和其他信息存储到数据库中以供标记使用。我正在使用数据库方法,因为我需要用标记位置存储更多信息。这部分代码有效。

我遇到的问题是调用标记信息以便删除它。我知道这 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);

        }

关于当我点击它以实际将其从 map 中删除时如何获取标记 ID 或标记本身的任何建议或指导?

编辑: 我更新了 AddMarker_ButtonClick

最佳答案

我发现从 map 中删除标记的解决方案:

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

我有一个名为 currentMarker 的全局 GMapMarker,它存储您单击的 item 标记。我还启用了删除表单上标记的按钮。

然后我通过单击按钮从 map 上删除标记,方法是:

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 属性,我可以在其中将标记 ID 存储到标记中。然后,我从全局 currentMarker.Tag 中提取该 ID,并将其存储到本地 int mID。我使用此 mID 删除带有我存储在我拥有的 sqlite 数据库中的标记 ID 的行。我还禁用该按钮,以在单击标记之前不允许任何用户错误。

关于c# - Gmap.net 标记删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30487699/

相关文章:

c# - Excel Addin 中的 Application.ActiveWorkbook 为空

c# - Visual Studio 不显示已加载程序集的名称

javascript - 使用 Javascript/jQuery 和 C# 将 SVG 转换为 PNG 以供下载

database - 如何在 Flutter Floor 中实际查看数据库?

c# - 使用 Mono : Can't connect to my sqlite database 的 Linq to SQL

opencv - 使用什么方法(在OpenCV中)将标记与适当的骨骼结构相关联?

java - 添加多个标记到 Google map

c# - 可以在 Visual Studio 2013 中将 ClickOnce 的发布选项设为特定配置

android - 在sqlite中以树结构从数据库中获取数据

javascript - 单击时将类添加到标记