具有多个叠加层的GMap.Net工具提示

时间:2016-07-10 01:23:33

标签: tooltip gmap.net

我有一个地图程序,在两个叠加层上使用2个叠加标记。我遇到的问题是,如果我将鼠标悬停在叠加层[0]中的标记上,则工具提示位于叠加层[1]上的标记下方。我可以覆盖GMapBaloonTool。有没有办法提供工具提示强制它到顶部?

1 个答案:

答案 0 :(得分:0)

3年后... 问题在于地图一张一张地绘制叠加层。每个覆盖都有自己的工具提示。稍后绘制的覆盖图绘制在其他层之上。这可能是设计使然。对我来说不好。因此,我更改了GmapOverlays.cs的OnRender方法:添加了新参数drawOnlyToolTips

public virtual void OnRender(Graphics g, bool drawOnlyToolTips = false)
{
 if (Control != null)
 {
  if (Control.RoutesEnabled && !drawOnlyToolTips)
  {
     foreach (GMapRoute r in Routes)
     {
        if (r.IsVisible)
        {
           r.OnRender(g);
        }
     }
  }

  if (Control.PolygonsEnabled && !drawOnlyToolTips)
  {
     foreach (GMapPolygon r in Polygons)
     {
        if (r.IsVisible)
        {
           r.OnRender(g);
        }
     }
  }

  if (Control.MarkersEnabled)
  {
     // markers
     if (!drawOnlyToolTips)
     {
        foreach (GMapMarker m in Markers)
        {
           //if(m.IsVisible && (m.DisableRegionCheck || Control.Core.currentRegion.Contains(m.LocalPosition.X, m.LocalPosition.Y)))
           if (m.IsVisible || m.DisableRegionCheck)
           {
              m.OnRender(g);
           }
        }
     }

     // tooltips above
     foreach (GMapMarker m in Markers)
     {
        //if(m.ToolTip != null && m.IsVisible && Control.Core.currentRegion.Contains(m.LocalPosition.X, m.LocalPosition.Y))
        if (m.ToolTip != null && m.IsVisible && drawOnlyToolTips)
        {
           if (!string.IsNullOrEmpty(m.ToolTipText) && (m.ToolTipMode == MarkerTooltipMode.Always || (m.ToolTipMode == MarkerTooltipMode.OnMouseOver && m.IsMouseOver)))
           {
              m.ToolTip.OnRender(g);
           }
        }
     }
  }
  }
}

接下来,在GMapControl.cs中,方法保护的虚拟虚空OnPaintOverlays(Graphics g)中,我更改了代码:

     foreach (GMapOverlay o in Overlays)
     {
        if (o.IsVisibile)
        {
           o.OnRender(g, false); //call without drawing the tooltips
        }
     }

     foreach (GMapOverlay o in Overlays)
     {
        if (o.IsVisibile)
        {
           o.OnRender(g, true); //draw only tooltips, after everything else is drawn
        }
     }