草庐IT

c# - Gmap.net 标记删除

coder 2023-07-21 原文

我正在为 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# - Gmap.net 标记删除的更多相关文章

  1. ruby-on-rails - Ruby net/ldap 模块中的内存泄漏 - 2

    作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代

  2. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

  3. ruby - 我可以使用 Ruby 从 CSV 中删除列吗? - 2

    查看Ruby的CSV库的文档,我非常确定这是可能且简单的。我只需要使用Ruby删除CSV文件的前三列,但我没有成功运行它。 最佳答案 csv_table=CSV.read(file_path_in,:headers=>true)csv_table.delete("header_name")csv_table.to_csv#=>ThenewCSVinstringformat检查CSV::Table文档:http://ruby-doc.org/stdlib-1.9.2/libdoc/csv/rdoc/CSV/Table.html

  4. ruby - 如何模拟 Net::HTTP::Post? - 2

    是的,我知道最好使用webmock,但我想知道如何在RSpec中模拟此方法:defmethod_to_testurl=URI.parseurireq=Net::HTTP::Post.newurl.pathres=Net::HTTP.start(url.host,url.port)do|http|http.requestreq,foo:1endresend这是RSpec:let(:uri){'http://example.com'}specify'HTTPcall'dohttp=mock:httpNet::HTTP.stub!(:start).and_yieldhttphttp.shou

  5. ruby - 我可以使用 aws-sdk-ruby 在 AWS S3 上使用事务性文件删除/上传吗? - 2

    我发现ActiveRecord::Base.transaction在复杂方法中非常有效。我想知道是否可以在如下事务中从AWSS3上传/删除文件:S3Object.transactiondo#writeintofiles#raiseanexceptionend引发异常后,每个操作都应在S3上回滚。S3Object这可能吗?? 最佳答案 虽然S3API具有批量删除功能,但它不支持事务,因为每个删除操作都可以独立于其他操作成功/失败。该API不提供任何批量上传功能(通过PUT或POST),因此每个上传操作都是通过一个独立的API调用完成的

  6. c# - 如何在 ruby​​ 中调用 C# dll? - 2

    如何在ruby​​中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL

  7. C# 到 Ruby sha1 base64 编码 - 2

    我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha

  8. ruby - Net::HTTP 获取源代码和状态 - 2

    我目前正在使用以下方法获取页面的源代码:Net::HTTP.get(URI.parse(page.url))我还想获取HTTP状态,而无需发出第二个请求。有没有办法用另一种方法做到这一点?我一直在查看文档,但似乎找不到我要找的东西。 最佳答案 在我看来,除非您需要一些真正的低级访问或控制,否则最好使用Ruby的内置Open::URI模块:require'open-uri'io=open('http://www.example.org/')#=>#body=io.read[0,50]#=>"["200","OK"]io.base_ur

  9. ruby - 如何安全地删除文件? - 2

    在Ruby中是否有Gem或安全删除文件的方法?我想避免系统上可能不存在的外部程序。“安全删除”指的是覆盖文件内容。 最佳答案 如果您使用的是*nix,一个很好的方法是使用exec/open3/open4调用shred:`shred-fxuz#{filename}`http://www.gnu.org/s/coreutils/manual/html_node/shred-invocation.html检查这个类似的帖子:Writingafileshredderinpythonorruby?

  10. ruby-on-rails - 标准化文件名的字符串,删除重音和特殊字符 - 2

    我正在尝试找到一种方法来规范化字符串以将其作为文件名传递。到目前为止我有这个:my_string.mb_chars.normalize(:kd).gsub(/[^\x00-\x7F]/n,'').downcase.gsub(/[^a-z]/,'_')但第一个问题:-字符。我猜这个方法还有更多问题。我不控制名称,名称字符串可以有重音符、空格和特殊字符。我想删除所有这些,用相应的字母('é'=>'e')替换重音符号,并将其余的替换为'_'字符。名字是这样的:“Prélèvements-常规”“健康证”...我希望它们像一个没有空格/特殊字符的文件名:“prelevements_routin

随机推荐