各位大神,索引超出了数组界限 VB.NET啊,很简单改一下吧,十分感谢!

Public Class Form1

Dim music() As String
Dim n As Integer = 100

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
music = OpenFileDialog1.FileNames
AxWindowsMediaPlayer1.URL = music(n)((这里提示索引超出了界限))
Label1.Text = music(n)
End If

你的数组引用n在哪里更改的呢?

更改之前要判断一下是否超了界,
if n>ubound(music) then n=ubound(music)'如果走出范围,取最大范围
还有
Dim n As Integer = 100直接定义维数,还是建议用动态数组追问

嗯大神你好,动态数组怎么写呢?这个表示还不太清楚,麻烦一下啦

追答

' 动态数组的使用
Dim music() As String

'你的歌曲看有多少个,假设为30个

ReDim Preserve music(30)

'把30个分别赋值进去

'假如你删除了10个
ReDim Preserve music(20)

'每次引用前加以判断
if n>ubound(music) then n=ubound(music)'如果走出范围,取最大范围

--------------------------------------------------------------------
以下供你参考
--------------------------------------------------------------------
ReDim 语句

在过程级别中使用,用于为动态数组变量重新分配存储空间。

语法

ReDim [Preserve] varname(subscripts) [As type] [, varname(subscripts) [As type]] . . .

ReDim 语句的语法包括以下几个部分:

部分 描述
Preserve 可选的。关键字,当改变原有数组最末维的大小时,使用此关键字可以保持数组中原来的数据。
说明

ReDim 语句用来定义或重定义原来已经用带空圆括号(没有维数下标)的 Private、Public 或 Dim 语句声明过的动态数组的大小。

可以使用 ReDim 语句反复地改变数组的元素以及维数的数目,但是不能在将一个数组定义为某种数据类型之后,再使用 ReDim 将该数组改为其它数据类型,除非是 Variant 所包含的数组。如果该数组确实是包含在某个 Variant 中,且没有使用 Preserve 关键字,则可以使用 As type 子句来改变其元素的类型,但在使用了此关键字的情况下,是不允许改变任何数据类型的。

如果使用了 Preserve 关键字,就只能重定义数组最末维的大小,且根本不能改变维数的数目。例如,如果数组就是一维的,则可以重定义该维的大小,因为它是最末维,也是仅有的一维。不过,如果数组是二维或更多维时,则只有改变其最末维才能同时仍保留数组中的内容。下面的示例介绍了如何在为已有的动态数组增加其最末维大小的同时而不清除其中所含的任何数据。

Dim MyArray() As Integer '声明动态数组。
Redim MyArray(5) '分配 5 个元素。
For I = 1 To 5 '循环 5 次。
MyArray(I) = I '初始化数组。
Next I

下一条语句重定义该数组的大小,并清除其中的元素。

Redim MyArray(10) '大小重定为 10 个元素。
For I = 1 To 10 '循环 10 次。
MyArray(I) = I '初始化数组。
Next I

下面的语句重定义该数组的大小,但没有清除其中的元素。

Redim Preserve MyArray(15) '大小重定为 15 个元素。

温馨提示:答案为网友推荐,仅供参考
相似回答