Вопрос

У моих пользователей периодически возникает ошибка при использовании приложения Windows Forms, встроенного в VB.NET 3.5.Очевидно, когда они нажимают на форму и форма перерисовывается, красный «X» будет нарисован над элементом управления MenuStrip, и приложение выйдет из строя со следующей ошибкой.

Кто-нибудь видел это раньше?Может ли кто-нибудь указать мне в правильном направлении?

    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)
Это было полезно?

Решение

Вы добавляете элементы в эту полосу динамически?

Другие советы

Вам нужно будет найти, где в коде это происходит, но это вызвано целочисленной переменной, используемой для доступа к вашему динамическому меню.Прежде чем использовать меню, используйте оператор if, чтобы убедиться, что оно находится в диапазоне от 0 до размера коллекции — 1.Кроме того, поместите точку останова там, где вы создаете переменную, и проходите код, наблюдая, что с ней происходит.

Кроме того, вам поможет пример кода того, как вы используете динамическое меню.

Просматривая код, я обнаружил, что меню очищается и перезагружается всякий раз, когда обновляются данные формы.Меню необходимо загрузить только один раз, при первоначальной загрузке формы.

Я думаю, что меню может очищаться, пока форма находится в процессе рисования.Как вы думаете, это может быть правдой?

Спасибо всем, кто помог мне указать правильное направление.Я внес изменения, чтобы очищать/добавлять меню только при загрузке формы, поэтому я больше не должен видеть эту ошибку при рисовании формы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top