tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルインデックスが配列の境界外です。
記事No9474
投稿日: 2009/10/17(Sat) 11:11
投稿者tecc
[VB2008]
.NET暦は浅いです。

Public Class MainForm

    Private Sub MainForm_Load(ByVal sender As Object, _
                              ByVal e As System.EventArgs) Handles Me.Load
        Dim mmu As New MakeMenu(Me.MenuStrip1)
        Call mmu.AddMainList(4, "ファイル(&F)", "編集(&E)", _
                        "表示(&V)", "設定(&S)", "ヘルプ(&H)")
    End Sub
End Class

Imports System.Windows.Forms
Public Class MakeMenu
    Private msn As MenuStrip
    '初期化
    Public Sub New(ByVal formmenu As MenuStrip)
        msn = formmenu
    End Sub

    '[Expl] :メニュー項目の追加
    '[in]   :MenuNum :メニューの数 MenuName : メニューの名前
    Public Sub AddMainList(ByVal MenuNum As Integer, _
                           ByVal ParamArray MenuName() As String)
        Dim item() As ToolStripMenuItem = New ToolStripMenuItem(MenuNum) {}
        Dim i As Integer
        'Try
        For i = 0 To MenuNum
            item(i).Text = MenuName(i) ←エラー箇所
            msn.Items.Add(item(i))
        Next
        'Catch ex As Exception
        '    MessageBox.Show(Convert.ToString(i) & "番目のメニュー作成でエラー")
        'Finally

        'End Try
    End Sub
End Class

MenuStrip1のメニューを作成するに辺り上記のようなコードを作成してみました。
実行を行うと「インデックスが配列の境界外です。」左記のエラーが発生します。

配列のインデックスは0から4までの5つですので、インデックスが負の整数であったり
しない事はブレークポイントを設定して確認済みです。

Dim item() As ToolStripMenuItem = New ToolStripMenuItem(MenuNum) {}
この辺りの配列の仕方が違うのかなとも思っていますが判断がつきません。

このエラーが発生しない為に修正を行いたいです。
学習した方が良い項目やコードの指摘を教えて頂きたいです。
よろしくお願いします。

[ツリー表示へ]
タイトルRe: インデックスが配列の境界外です。
記事No9475
投稿日: 2009/10/17(Sat) 12:02
投稿者オショウ
> このエラーが発生しない為に修正を行いたいです。
> 学習した方が良い項目やコードの指摘を教えて頂きたいです。
> よろしくお願いします。

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        AddMainList("ファイル(&F)", "編集(&E)", "表示(&V)", "設定(&S)", "ヘルプ(&H)")

    End Sub

    Public Sub AddMainList(ByVal ParamArray MenuName() As String)

        Dim item() As ToolStripMenuItem

        MenuStrip1.Items.Clear()

        item = New ToolStripMenuItem(MenuName.GetUpperBound(0)) {}
        For i As Integer = 0 To MenuName.GetUpperBound(0)
            item(i) = New ToolStripMenuItem
            item(i).Text = MenuName(i)
        Next

        MenuStrip1.Items.AddRange(item)
        MenuStrip1.Refresh()

    End Sub

こういう結果が欲しいのでしょうか?

※ クラスでの生成はしてません・・・
  あしからず。

以上。

[ツリー表示へ]
タイトルRe^2: インデックスが配列の境界外です。
記事No9476
投稿日: 2009/10/17(Sat) 13:41
投稿者tecc
>     Public Sub AddMainList(ByVal ParamArray MenuName() As String)
>
>         Dim item() As ToolStripMenuItem
>
>         MenuStrip1.Items.Clear()
>
>         item = New ToolStripMenuItem(MenuName.GetUpperBound(0)) {}
>         For i As Integer = 0 To MenuName.GetUpperBound(0)
>             item(i) = New ToolStripMenuItem
>             item(i).Text = MenuName(i)
>         Next
>
>         MenuStrip1.Items.AddRange(item)
>         MenuStrip1.Refresh()
>
>     End Sub

はい、このコード通りの動きを想定していました。
>         Dim item() As ToolStripMenuItem
>         item = New ToolStripMenuItem(MenuName.GetUpperBound(0)) {}
>         item(i) = New ToolStripMenuItem

この辺りの事をもう少し学習してみます。
ありがとうございました。

[ツリー表示へ]