ThinkGeo.com    |     Documentation    |     Premium Support

Marker Tooltips

 I am trying to update the tool tip of a ThinkGeo.MapSuite.DesktopEdition.Marker control and having a bit of trouble.  My code is for all intents and purposes like so:


namespace My.Space


{


    class MyClass


    {


        Marker m_Marker;


        public MyConstructor(){


            Marker m_Marker = new Marker(PointShape ps);


            m_Marker.Image = Properties.Resources.RedPin01;



            m_Marker.Width = 8;


            m_Marker.Height = 8;


            m_Marker.YOffset = 0;


           m_Marker.Position = ps;


        }


        private void SetToolTip(String s){


             m_Marker.ToolTipText  = s.ToString();


        }


}


 


The problem I am having is that the marker object seems to be adding another tool tip object on top of the old one when call SetToolTip(String s)...  If s is a tool tip with fewer lines of text than the old tool tip the old one will still be visible under the new one.


 


I have experimented with refreshing the marker and updating the map control but nothing obvious does the trick.  Am I missing something?


 




Brandt, 
  
 Thanks for your post, that is a bug for desktop edition, I just fixed it. Please get the latest version to try again, 
  
 Thanks, 
  
 Scott,

Scott,


 


Great, thanks.  One more question.  I am new to your software and your forums and I am not sure where I am able to get the latest version of your builds.  Can you point me in the right direction?  Thanks, Scott.


 


--Brandt



Brandt,


Please come to this link and login to your custom portal, so you can see the package list for the DailyBuilds development, you just need to download the latest version,


helpdesk.thinkgeo.com/login/?ReturnUrl=%2f


Any more questions please let me know,


Thanks,


Scott,



 Scott,


 


I see DesktopEditionFull4.5.184.0DllPackage.zip in the daily development builds section of my customer portal but it is dated 5/3/2011 which is before you posted the message indicating that you had fixed the bug.  Am I looking in the wrong place of has the latest dev build not been posted yet?  Thanks, Scott.


 


-Brandt



Brandt, 
  
 This period of time we are preparing the May public release, please get the 4.5.184.0 version to try first, if the problem is still existed in this version, please let me know, I will give you a temporary version so that you can continue your works, 
  
 Thanks, 
  
 Scott,

 Scott,


I tried the 4.5.184.0 version but the tool tip bug still exists in that version.  



 One more question regarding markers...  I am trying to handle marker click events.  The way I understand it I should be able to hook up an event handler to the the Marker.Click event and everything should be pretty strait forward.  When I click on the image associated with a Marker object a click event should get fired and my event handler should handle it.  However, my Marker.Click handler is never fired and I am not sure why.  I have completely disabled my track overlay in case that was over riding something.  The only thing I can think of is that my marker overlay is somehow "in the way" though that would seem to be counter intiutive.  


I cant seem to get my click event to actually fire.  I have tried everyting I can think of and scoured the forums to figure out why my event handler never processes the mous click events that must be getting generated.  My event handler never catches a fired click event. The drag mode of my MarkerOverlay is not set to drag (its set to None).   I am not overriding any mouse click events.  Am I missing something else?  


Any advice anyone can provide would be greatly appreciated!


 


See below for this gist of how I am setting up my markers:


 


 


namespace My.Space

{

    class MyMarker

    {

        Marker m_Marker;



        public MyMarker(PointShape ps)

        {

            m_Marker = new Marker(ps);

            m_Marker.Image = Properties.Resources.RedPin01;

            m_Marker.Width = 8;

            m_Marker.Height = 8;

            m_Marker.YOffset = 0;

            m_Marker.Position = ps;



            //  Hook up event handler

            m_Marker.Click += new EventHandler(ThinkGeoCADMap_Click);

        }



        private void Marker_Click(object sender, EventArgs e)

        {

            System.Diagnostics.Debug.WriteLine("marker_Click");

        }

    }

}


 



 P.S. - I am actually correctly linking the names of my event handler.  The mistake above (where I use a different handler name) was just an oversight on my part when I did my copy / paste / rename.  I appologize for the confusion.  


 


--Brandt



Brandt,


Thanks for your post and questions.
 
Please try to use the MapClick event instead, following posts shows you exactly how to implement it, please take a look if you are interested.
gis.thinkgeo.com/Support/Dis...fault.aspx
 
Any more questions please feel free to let me know.
 
Thanks.
 
Yale

 Yale,


 


I saw the post you were kind enough to link in the reply you supplied above but that does not really work for my requirements.  If I handle the MapClick event my event handler will not fire when a maker image is clicked.  It only fires if the map is clicked so I would have to click the map background next to the marker image and find the closest marker to that point. 


I have also tried to use :


marker1.Click +=new EventHandler(marker1_Click);


but my marker1_Click() event never fires when I click the marker (which seems very odd to me). 


What I need to be able to do is allow the user to click on a marker and handle the marker click event (basically allowing a user to select a maker).


I would assume the desired effect would be fairly simple to implement but the MapClick event does not work for me because it does not fire when a user clicks on a marker image and I can not get the marker1.Click event to fire.  Have I misunderstood something or am I missing something?


 


 


 



Brandt, 
  
 Thanks for your post and response. 
  
 Did you have a chance to test the sample (Post8715Sample.zip )attached on 04-05-2011 09:15 AM in that link? 
  
 Any more questions please feel free to let me know. 
  
 Thanks. 
  
 Yale 


 Yale,


 


Yes, I saw the sample (Post8715Sample.zip )attached on 04-05-2011 09:15.  It details how to add customized markers to the map.  It does not offer any insight on how to properly handle an event generated when a user clickes on a marker image.  Are we talking about the same post?


 


--Brandt



 Also, I have experimented with some of the other code on the page you referenced:




Marker marker1 = new Marker(-113.547125, 36.0296875);
marker1.Image = new Bitmap(@"..\..\data\n.png");
marker1.Width = 20;
marker1.Height = 34;
marker1.YOffset = -17;
marker1.Click += new EventHandler(marker_Click); 

markerOverlay.Markers.Add(marker1ker1);


 


When I use this code my marker_Click event handler only fires when I click around the marker.  I need to be able to handle events when users click on the actual marker1.Image image.




Brandt, 
  
 Thanks for your post and question. 
  
 I now can recreate the issue mentioned in your previous post, it seems there is a hidden bug in the Marker click event, I will report this to our development team. We probably will try to get it investigated after the public release in the coming week. 
  
 Any more questions please feel free to let me know. 
  
 Thanks. 
  
 Yale 


Yale,


OK.  Thanks, Yale.  Does that mean that there will be a fix for in in a daily development release or will it be an issue resolved only by the public release following the next public release?  I ask because I would like to get an idea of when I will be able to leverage marker click events as it is a requirement I can not do without.  A work around would do nicely for the interim if you have one.  If not I'll settle for an idea of when this functionality will be available.  Thanks in advance!


 


Regards,


Brandt



Brandt, 
  
 I think it would be resolved in some daily development release after this public release coming in next week. We have created a Gemini issue (issue6749) for this and hope we can work on this as soon as possible. 
  
 Any more questions please feel free to let me know. 
  
 Thanks. 
  
 Yale 


 Are there any updates regarding the bug in the Marker.Click event?  I am very keen on being able to properly handle marker click events.  We have a trade show comming up in a couple of weeks and there is a lot of functionality tied to processing your marker click events that we would like to be able to showcase.  Any updates on this matter would be greatly appreciated.  Thanks in advance!



Dear Brandt, 



Because our marker’s event is inherit from Microsoft, so we can’t change it, then we have a workaround to resolve this problem. You can try the code as below:



private void DisplayMap_Load(object sender, EventArgs e)
        {
            winformsMap1.MapUnit = GeographyUnit.DecimalDegree;
            winformsMap1.CurrentExtent = new RectangleShape(-155.733, 95.60, 104.42, -81.9);

            WorldMapKitWmsDesktopOverlay worldMapKitOverlay = new WorldMapKitWmsDesktopOverlay();
            winformsMap1.Overlays.Add(worldMapKitOverlay);
            InMemoryFeatureLayer inmemoryFeatureLayer = new InMemoryFeatureLayer();
            inmemoryFeatureLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle = new PointStyle(new GeoImage(yourMarkerImageFilePath)); 
            inmemoryFeatureLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;

            LayerOverlay markerOverlay = new LayerOverlay();
            markerOverlay.Layers.Add(inmemoryFeatureLayer);
            winformsMap1.Overlays.Add("MarkerOverlay", markerOverlay);
            winformsMap1.Refresh();
        }

        private void winformsMap1_MapClick(object sender, MapClickWinformsMapEventArgs e)
        {
            LayerOverlay markerOverlay = (LayerOverlay)winformsMap1.Overlays["MarkerOverlay"];
            InMemoryFeatureLayer inmemoryFeatureLayer = markerOverlay.Layers[0] as InMemoryFeatureLayer;

            MultipolygonShape buffer = e.WorldLocation.Buffer(350, GeographyUnit.DecimalDegree, DistanceUnit.Kilometer);

            Collection<Feature> deleteMarkers = inmemoryFeatureLayer.QueryTools.GetFeaturesWithin(buffer, ReturningColumnsType.NoColumns);
            if (deleteMarkers.Count > 0)
            {
                inmemoryFeatureLayer.InternalFeatures.Remove(deleteMarkers[0]);
            }
            else
            {
                inmemoryFeatureLayer.InternalFeatures.Add(new Feature(e.WorldLocation));
            }

            winformsMap1.Refresh();
        }


  I think we are cycling around to the same points over and over again.  I am aware that I can get the markers within a certain range of a selected click with the code posted above.  This does not really help me though.  And I realize that the onclick event is probably inherited from Microsoft but I dont think this is an issue...  




 


I am trying to process user interaction with markers.  I need to be able to respond to situations where users click on the image that represents a marker on the map (the Marker.Image object).  Getting a collection of markers within a certain distance of a section of map control that the user has clicked does not work for me.  I can use the marker's click handler but clicking ON the marker does not cause the appropriate event to get fired.  Clicking NEAR the marker does.  I have experimented with moving the marker around with the offset properties but this does not help at all.  The area of the map that will fire the click event moves along with the marker offset.  


 


Yale mentioned on 5/10 that he could recreate the issue.  It would seem to me that handling a marker click event SHOULD be a fairly simple matter.  Can anyone explain to me why, when if comes to markers,  your maping software offers no more granularity than getting a collection of markers within a predefined distance of a mouse click?  This seems to be a SERIOUS limitation to me.  I cant really believe that it is truely an issue that can not be resolved because click events are inherited from Microsoft...


 


Again, I need to be able to respond to users clicking ON the actual images that represent your marker objects on the map.  I am sure that I am missing somthing or that my questions and comments are being misunderstood.  I simply need to be able to respond to situations where users click on the images that represent your marker objects on the map.  Surely this is not the first time this functinality has been required.  Can anyone shed some more light on this issue please?