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
相关产品推荐
相关产品推荐

