我有一个显示集合的列表框。最初,列表框仅包含两个对象的默认数据库。用户将新对象添加到集合中,并在列表框中更新。
在用户添加新对象之前,我的代码按预期工作。
将对象加载到列表框中的代码。
private void FillStudentListBox()
{
lstStudents.Items.Clear();
for (int i = 0; i < students.Count; i++)
{
Student s = students[i];
lstStudents.Items.Add(s.GetDisplayText());
}
}
我的更新按钮代码:
public void btnUpdate_Click(object sender, EventArgs e)
{
int target = Convert.ToInt16(lstStudents.SelectedIndex);
if (target != -1)
{
UpdateStudentScores updateStudentScores = new UpdateStudentScores(target);
updateStudentScores.Show();
}
}
如果我单击其中一个默认用户,然后单击“更新”,则表单将打开并填充正确的数据。但是,如果我添加一个新对象,然后单击新对象上的Update,我会在代码的这一部分出错:
public Student this [int i]
{
get
{
return students[i];
}
set
{
students[i] = value;
Changed(this);
}
}
我确定该集合未正确更新。在某处:
private void button2_Click(object sender, EventArgs e)
{
if (IsValidData())
{
List<string> result = txtScores.Text.Split(new [] {' '}, StringSplitOptions.RemoveEmptyEntries).ToList();
student = new Student(txtName.Text, result.Select(int.Parse).ToList());
this.Close();
}
}
列表框已正确填写但索引计数仍然是2,应该是3.我在路上犯了什么简单的错误?
这里应该将学生添加到我的收藏中:
private void btnAddNew_Click(object sender, EventArgs e)
{
AddNewStudent addStudentForm = new AddNewStudent();
Student student = addStudentForm.GetNewStudent();
if (student != null)
{
students += student;
}
}
我觉得这个代码已被设计为在单击按钮时已完成学生对象。
答案 0 :(得分:0)
一旦声明,数组就是固定长度。尝试从数组中提取数据时OutOfRangeException通常表示您正在搜索不存在的索引。
为什么不使用列表而不是使用数组呢?然后,你可以使用像foreach这样的东西。
但是如果你不想这样做,你将不得不找到一种方法来更新你的数组(重新定义它更大),这样它就不会尝试返回超出范围的数据。 :)