R_hu 2023-11-19 18:00 采纳率: 0%
浏览 13
已结题

C#窗体程序,右击快捷菜单项“打开文件夹”,无法打开里面图片在窗体上显示,并且报错索引超出数组边界。怎么解决?

在窗体运行时,右击快捷菜单栏“打开文件夹”项后,在弹窗中选择一个存有4张.jpg图片的文件夹,点击确定后,程序代码就报错索引超出了数组界限,并且窗体上也没能显示图片应该如何解决?

img

img

程序代码如下:

img

img

img

  • 写回答

19条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2023-11-19 18:04
    关注
    获得0.45元问题酬金

    引自强大而免费的微信小程序:皆我百晓生

    问题出在 ShowPic() 方法中判断 index 的范围时的错误。在该方法中,应该将文件总数 files.Length 改为 files.Length - 1。

    修改后的 ShowPic() 方法代码如下:

    private void ShowPic()
    {
        if (index < 0)
            index = files.Length - 1;
        if (index > files.Length - 1)
            index = 0;
        picShowPic.Image = Image.FromFile(files[index]);
        picShowPic.Tag = files[index];
        lblMsg.Text = (index + 1).ToString() + "/" + (files.Length).ToString();
    }
    此外,还推荐在 ShowPic() 方法中加入对 files 数组为空的判断,以避免空引用异常。
    
    修改后的 ShowPic() 方法完整代码如下:
    
    private void ShowPic()
    {
        if (files == null || files.Length == 0)
        {
            return;
        }
    
        if (index < 0)
            index = files.Length - 1;
        if (index > files.Length - 1)
            index = 0;
        picShowPic.Image = Image.FromFile(files[index]);
        picShowPic.Tag = files[index];
        lblMsg.Text = (index + 1).ToString() + "/" + (files.Length).ToString();
    }
    

    以上是根据提供的代码进行修改的,但是注意到代码中有一个错误:files = Directory.GetFiles(path, ". jpg"); 将 ". jpg" 改为 ".jpg",以确保正确读取文件夹中的图片文件。

    代码修改后应该可以正常运行了。

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 11月27日
  • 创建了问题 11月19日