You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#实现Previous上一页按钮功能时点击报错如何解决

问题根因

  • 首次运行时indexForInfoList默认值为0,点击上一页按钮后直接执行indexForInfoList--变成-1,现有代码没有处理索引小于0的边界场景,直接用负数下标访问courseList集合触发索引越界异常,导致程序崩溃。
  • 现有边界判断逻辑完全错误:你写的if (indexForInfoList >= countOfCourses)是处理下一页溢出的逻辑,完全不适配上一页的场景,即使索引变成-1也不会触发任何修正逻辑,最终直接用非法下标访问集合。
  • 就算触发了你写的修正逻辑,把索引设为-1依然是非法下标,访问集合还是会崩溃。

修复方案

方案1:循环翻页效果(点上一页到第一个元素后,再点跳转到最后一个元素)

private void loadPreviousCourse()
{
    int countOfCourses = courseList.Count;
    if (countOfCourses > 0)
    {
        indexForInfoList--;
        // 处理上一页越界:索引小于0时跳转到最后一条
        if (indexForInfoList < 0)
            indexForInfoList = countOfCourses - 1;

        Course currentCourse = courseList[indexForInfoList];
        textBoxCourseNumber.Text = currentCourse.courseNumber.ToString();
        textBoxCourseName.Text = currentCourse.courseName;
        textBoxCourseCredits.Text = currentCourse.numberOfCredits.ToString();
        textBoxGrade.Text = currentCourse.grade;
    }
}

方案2:非循环翻页效果(点上一页到第一个元素后,再点无任何操作)

private void loadPreviousCourse()
{
    int countOfCourses = courseList.Count;
    // 提前判断:无数据或者已经是第一条时直接返回,不做操作
    if (countOfCourses == 0 || indexForInfoList <= 0)
    {
        return;
    }
    indexForInfoList--;
    Course currentCourse = courseList[indexForInfoList];
    textBoxCourseNumber.Text = currentCourse.courseNumber.ToString();
    textBoxCourseName.Text = currentCourse.courseName;
    textBoxCourseCredits.Text = currentCourse.numberOfCredits.ToString();
    textBoxGrade.Text = currentCourse.grade;
}

内容的提问来源于stack exchange,提问作者tpaff85

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 09:54:02