Pregunta

Mis usuarios tienen un error intermitente cuando usan una aplicación de Windows Forms integrada en VB.NET 3.5.Aparentemente, cuando hacen clic en el formulario y el formulario se vuelve a pintar, se pintará una 'X' roja sobre el control MenuStrip y la aplicación fallará con el siguiente error.

¿Alguien ha visto esto antes?¿Alguien me puede apuntar en la dirección correcta?

    System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
       Parameter name: index

   at System.Collections.ArrayList.get_Item(Int32 index)
   at System.Windows.Forms.ToolStripItemCollection.get_Item(Int32 index)
   at System.Windows.Forms.ToolStrip.OnPaint(PaintEventArgs e)
   at System.Windows.Forms.Control.PaintWithErrorHandling(PaintEventArgs e, Int16 layer, Boolean disposeEventArgs)
   at System.Windows.Forms.Control.WmPaint(Message& m)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
   at System.Windows.Forms.ToolStrip.WndProc(Message& m)
   at System.Windows.Forms.MenuStrip.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
¿Fue útil?

Solución

¿Está agregando elementos a esta franja de forma dinámica?

Otros consejos

Tendrá que encontrar en qué parte del código sucede esto, pero se debe a que se utiliza una variable entera para acceder a su menú dinámico.Antes de usar el menú, use una declaración if para asegurarse de que esté entre 0 y el tamaño de la colección: 1.Además, coloque un punto de interrupción donde cree la variable y recorra el código observando qué le sucede.

Además, sería útil un ejemplo de código de cómo se utiliza el menú dinámico.

Mientras revisaba el código, descubrí que el menú se borra y se recarga cada vez que se actualizan los datos del formulario.El menú solo necesita cargarse una vez, cuando se carga inicialmente el formulario.

Creo que es posible que el menú se esté borrando mientras se pinta el formulario.¿Crees que esto puede ser cierto?

Gracias a todos los que me ayudaron a orientarme en la dirección correcta.Hice un cambio para borrar/agregar el menú solo cuando el formulario está cargado, por lo que no debería volver a ver este error cuando el formulario se esté pintando.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top