索引超出了数组的边界
本文关键字:边界 数组 索引 | 更新日期: 2023-09-27 18:05:45
我得到一个"索引是在数组的边界之外"的错误与下面的代码。它发生在音乐停止后,我试图点击另一首歌曲。如何解决这个问题?
private void button1_Click(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
files = openFileDialog1.SafeFileNames;
paths = openFileDialog1.FileNames;
for (int i = 0; i < files.Length; i++)
{
listBox1.Items.Add(files[i]);
}
}
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
axWindowsMediaPlayer1.URL = paths[listBox1.SelectedIndex];
}
当选择新文件时,您不会清除ListBox
中的旧项。在添加新项之前,使用Clear
方法删除旧项。
您正在描述的错误发生是因为您的ListBox
变量中的项目比您的paths
变量中的项目多。
这将是你的新代码:
private void button1_Click(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
files = openFileDialog1.SafeFileNames;
paths = openFileDialog1.FileNames;
listBox1.Items.Clear(); // added this line
for (int i = 0; i < files.Length; i++)
{
listBox1.Items.Add(files[i]);
}
}
}
您需要使用列表框的DisplayMember
和ValueMember
,并绑定到Tuple<string,string>
的集合。
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
string path=listBox1.SelectedValue as string;
// return the path of the item
}
private void button1_Click(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog()==DialogResult.OK)
{
var files=openFileDialog1.FileNames;
var paths=openFileDialog1.SafeFileNames;
var items=new List<Tuple<string, string>>();
if (paths.Length!=files.Length) throw new IndexOutOfRangeException();
for (int i=0; i<files.Length; i++)
{
items.Add(
new Tuple<string, string>(files[i],paths[i])
);
}
listBox1.DataSource=items;
listBox1.DisplayMember="Item1";
listBox1.ValueMember="Item2";
}
}
Try
axWindowsMediaPlayer1.URL = paths[listBox1.FocusedItem.Index];
而不是我不确定,但似乎你在玩之前专注于项目,对吗?如果是,那么试试上面的代码。上面的Spooky也提出了一个很好的观点。他的建议可能也会奏效。在添加新文件之前,请尝试清除列表视图。
listBox1.Items.Clear();