ThinkGeo.com    |     Documentation    |     Premium Support

Error message when the track changes mode

Hi, 





I have an error message with this scenario : 
1) The user choose which shape he wants to draw . He chooses Point. (ie screenshot usercontrol.jpg)
2) The user draws in trackOverlay,

3) The event TrackEnded is fired and the feature in the track overlay is copied in the editoverlay
3) The user can modify the feature in the edit overlay and valid the drawing
4) The track mode is active again

5) The user can change the shape, he chooses surface and there is an error message : 






L’exception System.ArgumentOutOfRangeException n’a pas été gérée
  HResult=-2146233086
  Message=L’index était hors limites. Il ne doit pas être négatif et doit être inférieur à la taille de la collection.
Nom du paramètre : index
  Source=mscorlib
  ParamName=index
  StackTrace:
       à System.Collections.ObjectModel.Collection`1.set_Item(Int32 index, T value)
       à ThinkGeo.MapSuite.WpfDesktopEdition.TrackInteractiveOverlay.MouseDownCore(InteractionArguments interactionArguments)
       à ThinkGeo.MapSuite.WpfDesktopEdition.InteractiveOverlay.MouseDown(InteractionArguments interactionArguments)
       à ThinkGeo.MapSuite.WpfDesktopEdition.TrackInteractiveOverlay.MouseClickCore(InteractionArguments interactionArguments)
       à ThinkGeo.MapSuite.WpfDesktopEdition.InteractiveOverlay.MouseClick(InteractionArguments interactionArguments)
       à ThinkGeo.MapSuite.WpfDesktopEdition.WpfMap.gBc=(InteractionArguments gRc=)
       à ThinkGeo.MapSuite.WpfDesktopEdition.WpfMap.fRc=(Object fhc=, MouseButtonEventArgs fxc=)
       à ohM=.hhk=.OnSingleClick(Object sender, MouseButtonEventArgs e)
       à ohM=.hhk=.eBo=(Object eRo=, MouseButtonEventArgs eho=, Object exo=)
       à ohM=.hhk=.OnMouseMove(Object sender, MouseEventArgs e)
       à System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
       à System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
       à System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
       à System.Windows.UIElement.RaiseTrustedEvent(RoutedEventArgs args)
       à System.Windows.Input.InputManager.ProcessStagingArea()
       à System.Windows.Input.InputProviderSite.ReportInput(InputReport inputReport)
       à System.Windows.Interop.HwndMouseInputProvider.ReportInput(IntPtr hwnd, InputMode mode, Int32 timestamp, RawMouseActions actions, Int32 x, Int32 y, Int32 wheel)
       à System.Windows.Interop.HwndMouseInputProvider.FilterMessage(IntPtr hwnd, WindowMessage msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
       à System.Windows.Interop.HwndSource.InputFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
       à MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
       à MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
       à System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
       à MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)
       à System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
       à MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
       à MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
       à System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
       à System.Windows.Application.RunInternal(Window window)
       à System.Windows.Application.Run()



       à System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
       à Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       à System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       à System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       à System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       à System.Threading.ThreadHelper.ThreadStart()
  InnerException: 






The trackmode is changed when the event TrackStarting is fired
 map.TrackOverlay.TrackStarting += action.TrackOverlay_TrackStarting;

   void TrackOverlay_TrackStarting(object sender, TrackStartingTrackInteractiveOverlayEventArgs e)
        {  
            editeur.Map.TrackOverlay.TrackMode = ((TrackMode)editeur.TypeDessin);            
        }






The code for the step 3 is 



  private bool terminerModeTrack(BaseShape shape)
        {
            editeur.Map.TrackOverlay.TrackShapeLayer.InternalFeatures.Clear();
            editeur.Map.TrackOverlay.TrackEnded -= TrackOverlay_TrackEnded;
            editeur.Map.TrackOverlay.TrackStarting -= TrackOverlay_TrackStarting;
            editeur.Map.TrackOverlay.TrackMode = ThinkGeo.MapSuite.WpfDesktopEdition.TrackMode.None;            



            var cmd = this.Commande;
            if (cmd == null) return false;



            if (shape == null)
            {
                cmd.Annuler(editeur);
                return true;
            }
            else
            {
                this.editeur.Map.EditOverlay.EditShapesLayer.InternalFeatures.Add(shape.GetFeature());
                this.editeur.Map.EditOverlay.CalculateAllControlPoints();
                this.editeur.Map.EditOverlay.Refresh();
                étatActionEditeur = TypeEtatActionEditeur.Modification;
            }



            return false







The version of dll if 8.0.103.0



Can you reproduce the error message ?
Thanks for your help.



Regards.
Steph

Usercontrol.jpg (1.79 KB)

Hi Steph, 
  
 Thanks for your detailed description, I guess all are very basic functionalities, I tried to reproduce the problem with the specified version 8.0.103.0, following your description, the test is made on a similar environment, France format and Windows 8.1. Would you please try the installation “How Do I\TrackAndEditShapes.xaml” to see if it works fine on your machine,  is it possible to provide a straightforward sample  here? 
  
 Thanks, 
 Johnny 


Hi Johnny, 



Thanks.

I think I found the problem.



On the event TrackStarting, I set MouseDownCount to 0 before changing the trackmode and I didn’t have the error message anymore.



void TrackOverlay_TrackStarting(object sender, TrackStartingTrackInteractiveOverlayEventArgs e)


   editeur.Map.TrackOverlay.MouseDownCount = 0;

  editeur.Map.TrackOverlay.TrackMode = TrackMode.Polygon (for example).

}



Thanks.

Regards.

Steph.

Steph,  
  
 Great to hear you fixed it. 
 Any other questions, don’t hesitate to let us know. 
  
 Thanks, 
 Troy