2008-09-05 10 views
0

VB.NET 3.5でビルドされたWindowsフォームアプリケーションを使用すると、ユーザーの断続的なエラーが発生しています。フォームをクリックしてフォームを再描画すると、赤い「X」がMenuStripコントロールにペイントされ、アプリケーションがクラッシュして次のエラーが表示されるようです。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) 

答えて

0

このストリップにアイテムを動的に追加していますか?

0

コード内のどこでこれが起こっているのかを特定する必要がありますが、ダイナミックメニューにアクセスするために整数変数が原因です。メニューを使用する前に、ifステートメントを使用して0とコレクション-1のサイズの間であることを確認します。また、変数を作成する箇所にブレークポイントを置き、コードをステップ実行します。

また、ダイナミックメニューをどのように使用しているかのコードサンプルも役立ちます。

0

コードを見て、フォームデータが更新されるたびにメニューが消去され、再読み込みされていることがわかりました。フォームが最初に読み込まれるときに、メニューを一度読み込むだけで済みます。

フォームがペイントされている間にメニューが消去されている可能性があります。これが本当かもしれないと思いますか?

0

私は正しい方向に向けるのに役立つ皆さん、ありがとうございます。私は、フォームがロードされたときにメニューをクリア/追加するだけの変更を加えました。フォームがペイントされているときにこのエラーが再び表示されることはありません。

関連する問題