Errore MenuStrip
Domanda
I miei utenti riscontrano un errore intermittente quando utilizzano un'applicazione Windows Form incorporata in VB.NET 3.5.Apparentemente quando fanno clic sul modulo e il modulo viene ridisegnato, una "X" rossa verrà dipinta sul controllo MenuStrip e l'app si bloccherà con il seguente errore.
Qualcuno l'ha già visto?Qualcuno può indicarmi la giusta direzione?
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)
Soluzione
Stai aggiungendo elementi a questa striscia in modo dinamico?
Altri suggerimenti
Dovrai scoprire in quale punto del codice ciò accade, ma è causato da una variabile intera utilizzata per accedere al menu dinamico.Prima di utilizzare il menu, utilizza un'istruzione if per assicurarti che sia compresa tra 0 e la dimensione della raccolta - 1.Inoltre, posiziona un punto di interruzione in cui crei la variabile e scorri il codice osservando cosa gli succede.
Inoltre, un esempio di codice su come utilizzi il menu dinamico potrebbe essere d'aiuto.
Osservando il codice, ho scoperto che il menu viene cancellato e ricaricato ogni volta che i dati del modulo vengono aggiornati.Il menu deve essere caricato solo una volta, quando il modulo viene inizialmente caricato.
Penso che il menu potrebbe essere cancellato mentre il modulo è in fase di verniciatura.Pensi che questo possa essere vero?
Grazie a tutti voi che mi avete aiutato a indicarmi la giusta direzione.Ho apportato una modifica per cancellare/aggiungere il menu solo quando il modulo viene caricato, quindi non dovrei visualizzare nuovamente questo errore quando il modulo viene dipinto.