c#要查询的索引超出范围

仔航 程 0 信誉分
2024-06-28T08:19:26.6233333+00:00

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.IO;

using WMPLib;

namespace media

{

public partial class Form1 : Form

{

    //声明一个list存储文件路径

    List<string> urlList = new List<string>();//泛型

    public Form1()

    {

        InitializeComponent();

    }

    private void label1_Click(object sender, EventArgs e)

    {

    }

    private void trackBar1_Scroll(object sender, EventArgs e)

    {

    }

    private void listBoxMusics_SelectedIndexChanged(object sender, EventArgs e)

    {

    }

    private void button1_Click(object sender, EventArgs e)

    {

    }

    //添加歌曲

    private void btninput_Click(object sender, EventArgs e)

    {

        //实例化一个打开文件的文件夹的对话框

        OpenFileDialog of = new OpenFileDialog();

        //让选择器可以执行多选文件

        of.Multiselect = true;

        of.Title = "请选择音乐文件";

        //指定选择文件的类型

        of.Filter = "(*.mp3)|*.mp3";

        //确定用户选择的是确定按钮

        if (of.ShowDialog() == DialogResult.OK)

        {

            //把用户选择的文件储存到数组中

            string[] nameList = of.FileNames;

            //读取数组中的数据

            foreach (string url in nameList)

            {

                //Path.GetFileNameWithoutExtension(url); 获取不具有扩展名的文件

                listBoxMusics.Items.Add(Path.GetFileNameWithoutExtension(url));

                urlList.Add(url);

            }

        }

    }

    private void btnPause_Click(object sender, EventArgs e)

    {

    }

    private void btnStop_Click(object sender, EventArgs e)

    {

    }

    private void btnLast_Click(object sender, EventArgs e)

    {

    }

    private void btnNext_Click(object sender, EventArgs e)

    {

    }

    //列表选择发生变化时播放歌曲

    private void listBoxMusics_BindingContextChanged(object sender, EventArgs e)

    {

        //ListBox中的索引和urlList中的索引相对应

        //获取当前选中歌曲的索引

        int SelectedIndex = listBoxMusics.SelectedIndex;

        

        //把urlList中存储的地址赋给播放器

        axWindowsMediaPlayer1.URL = urlList[SelectedIndex];

    }

}

}

C#
C#
一种面向对象的类型安全的编程语言,它起源于 C 语言系列,包括对面向组件的编程的支持。
188 个问题
0 个注释 无注释
{count} 票

1 个答案

排序依据: 非常有帮助
  1. Jiale Xue - MSFT 46,476 信誉分 Microsoft 供应商
    2024-07-04T07:19:07.9566667+00:00

    Hi @仔航 程 ,

    在你的代码中,有两个地方可能会导致这个问题:

    1. listBoxMusics_BindingContextChanged 方法中的 SelectedIndex
    2. urlList[SelectedIndex] 的访问。

    为了确保在 SelectedIndex 有效时访问 urlList,可以添加一个索引范围检查。请参考下面修改后的代码:

    namespace media
    {
        public partial class Form1 : Form
        {
            // 声明一个list存储文件路径
            List<string> urlList = new List<string>(); // 泛型
    
            public Form1()
            {
                InitializeComponent();
            }
    
            private void label1_Click(object sender, EventArgs e)
            {
            }
    
            private void trackBar1_Scroll(object sender, EventArgs e)
            {
            }
    
            private void listBoxMusics_SelectedIndexChanged(object sender, EventArgs e)
            {
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
            }
    
            // 添加歌曲
            private void btninput_Click(object sender, EventArgs e)
            {
                // 实例化一个打开文件的文件夹的对话框
                OpenFileDialog of = new OpenFileDialog();
                // 让选择器可以执行多选文件
                of.Multiselect = true;
                of.Title = "请选择音乐文件";
                // 指定选择文件的类型
                of.Filter = "(*.mp3)|*.mp3";
                // 确定用户选择的是确定按钮
                if (of.ShowDialog() == DialogResult.OK)
                {
                    // 把用户选择的文件储存到数组中
                    string[] nameList = of.FileNames;
                    // 读取数组中的数据
                    foreach (string url in nameList)
                    {
                        // Path.GetFileNameWithoutExtension(url); 获取不具有扩展名的文件
                        listBoxMusics.Items.Add(Path.GetFileNameWithoutExtension(url));
                        urlList.Add(url);
                    }
                }
            }
    
            private void btnPause_Click(object sender, EventArgs e)
            {
            }
    
            private void btnStop_Click(object sender, EventArgs e)
            {
            }
    
            private void btnLast_Click(object sender, EventArgs e)
            {
            }
    
            private void btnNext_Click(object sender, EventArgs e)
            {
            }
    
            // 列表选择发生变化时播放歌曲
            private void listBoxMusics_BindingContextChanged(object sender, EventArgs e)
            {
                // ListBox中的索引和urlList中的索引相对应
                // 获取当前选中歌曲的索引
                int SelectedIndex = listBoxMusics.SelectedIndex;
    
                // 检查索引是否有效
                if (SelectedIndex >= 0 && SelectedIndex < urlList.Count)
                {
                    // 把urlList中存储的地址赋给播放器
                    axWindowsMediaPlayer1.URL = urlList[SelectedIndex];
                }
                else
                {
                    // 处理索引无效的情况,例如显示错误信息或日志记录
                    MessageBox.Show("选中的索引无效。");
                }
            }
        }
    }
    
    

    如果答案是正确的,请点击“接受答案”并点赞。 如果您对此答案还有其他疑问,请点击“评论”。

    注意:如果您想接收相关电子邮件,请按照我们的文档中的步骤启用电子邮件通知 此线程的通知。

    0 个注释 无注释

你的答案

问题作者可以将答案标记为“接受的答案”,这有助于用户了解已解决作者问题的答案。