Pergunta

Meus usuários estão tendo um erro intermitente ao usar um aplicativo Windows Forms criado em VB.NET 3.5.Aparentemente, quando eles clicam no formulário e ele é repintado, um 'X' vermelho será pintado sobre o controle MenuStrip e o aplicativo irá travar com o seguinte erro.

Alguém viu isso antes?Alguém pode me apontar na direção certa?

    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)
Foi útil?

Solução

Você está adicionando itens a esta faixa de forma dinâmica?

Outras dicas

Você terá que descobrir onde isso está acontecendo no código, mas está sendo causado por uma variável inteira usada para acessar seu menu dinâmico.Antes de usar o menu, use uma instrução if para garantir que esteja entre 0 e o tamanho da coleção - 1.Além disso, coloque um ponto de interrupção onde você cria a variável e percorre o código observando o que acontece com ela.

Além disso, um exemplo de código de como você está usando o menu dinâmico ajudaria.

Ao examinar o código, descobri que o menu é limpo e recarregado sempre que os dados do formulário são atualizados.O menu só precisa ser carregado uma vez, quando o formulário é carregado inicialmente.

Acho que o menu pode estar sendo limpo enquanto o formulário está sendo pintado.Você acha que isso pode ser verdade?

Obrigado a todos vocês que ajudaram a me apontar na direção certa.Fiz uma alteração para limpar/adicionar o menu apenas quando o formulário for carregado, então não devo ver esse erro novamente quando o formulário estiver pintando.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top