質問

VB.NET 3.5 で構築された Windows フォーム アプリケーションを使用すると、断続的なエラーが発生します。どうやら、フォームをクリックしてフォームが再描画されると、MenuStrip コントロール上に赤い「X」が描画され、次のエラーが表示されてアプリがクラッシュします。

これを見たことがありますか?誰かが私に正しい方向を教えてくれませんか?

    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 の間にあることを確認します。また、変数を作成する場所にブレークポイントを配置し、変数に何が起こるかを監視しながらコードをステップ実行します。

また、動的メニューの使用方法のコード サンプルも役立ちます。

コードを調べていると、フォーム データが更新されるたびにメニューがクリアされ、再ロードされていることがわかりました。メニューは、フォームが最初にロードされるときに 1 回だけロードする必要があります。

フォームの描画中にメニューがクリアされてしまう可能性があると思います。これは本当かもしれないと思いますか?

私を正しい方向に導いてくれた皆さんに感謝します。フォームが読み込まれたときにのみメニューをクリア/追加するように変更を加えたので、フォームが描画されているときにこのエラーが再び表示されることはありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top