ThinkGeo.com    |     Documentation    |     Premium Support

Cancel TrackingShape by pressing ESC key

I am trying to build some functionality that allows the user to cancel a trackshape operation by pressing the ESC key.  There are no errors thrown, but the trackshape operation does cancel.  I am testing it with TrackMode.Polygon


 


 



void winformsMap1_KeyDown(object sender, KeyEventArgs e)
        {
            if(e.KeyCode==Keys.Escape)
            {
                cancelUserShape = true;
                BaseShape bs =  winformsMap1.TrackOverlay.GetTrackingShape();
                TrackOverlay_TrackEnding(sender,new TrackEndingTrackInteractiveOverlayEventArgs(bs,true));                     winformsMap1.Refresh();
            }
        }

        void TrackOverlay_TrackEnding(object sender, TrackEndingTrackInteractiveOverlayEventArgs e)
        {
            if (cancelUserShape)
            {
                e.Cancel = true;
                cancelUserShape = false;
            }
           
        }


Ed, 


Thanks for your post!
 
1. Try the following codes, hopefully it is what you are trying to do.

        private void Form1_Load(object sender, EventArgs e)
        {
            winformsMap1.TrackOverlay.TrackMode = TrackMode.Polygon;
        }

        private void TrackOverlayTrackEnding()
        {
            if (cancel)
            {
                winformsMap1.TrackOverlay.Lock.EnterWriteLock();
                try
                {
                    int count = winformsMap1.TrackOverlay.TrackShapeLayer.InternalFeatures.Count;
                    if (count > 0)
                    {
                        winformsMap1.TrackOverlay.TrackShapeLayer.InternalFeatures.Remove("InTrackingFeature");
                    }
                    //winformsMap1.TrackOverlay.TrackShapeLayer.InternalFeatures.Add(new Feature(e.Shape));
                }
                finally
                {
                    winformsMap1.TrackOverlay.Lock.ExitWriteLock();
                }

                cancel = false;
                if (winformsMap1.TrackOverlay.TrackMode == TrackMode.Polygon || winformsMap1.TrackOverlay.TrackMode == TrackMode.Line)
                {
                    winformsMap1.TrackOverlay.MouseDoubleClick(new InteractionArguments());
                }
                else
                {
                    winformsMap1.TrackOverlay.MouseUp(new InteractionArguments());
                }

                winformsMap1.Refresh();
            }
        }

        private void winformsMap1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Escape)
            {
                cancel = true;
                TrackOverlayTrackEnding();
            }
        }

2. You can create your own TrackInteractiveOverlay to achieve this. 


Any more questions just let me know.
 
Thanks.
 
Yale

Worked perfectly. 
  
 Thanks for the help. 
  
 Ed

Ed, 
  
 You are welcome. 
  
 Let me know if any more problems. 
  
 Thanks. 
  
 Yale