【发布时间】:2016-04-16 18:58:30
【问题描述】:
我有一个文本框数组,它们根据用户输入的内容动态变化。这些文本框包含一个代表作业分数的数字。这些分数链接到一个模块对象。所以如果用户有3个模块;第一和第二模块2个作业,第三个模块3个作业;那么总共将创建 7 个文本框供用户输入他们所有的分配标记。
我要做的是创建一个 keyup 事件处理程序,在该处理程序中它获取用户输入的数字,然后动态调用一个方法来显示模块的平均值。这就是我到目前为止所拥有的。每当用户输入字符时,都会调用以下方法:
public void calculateLevel4Modules(int counter) {
//iterate through modules
//iterate through assignts in that module
//whilst iterating, check tb and set userscore
//after iterating, update overall label with regards to modulecounter
//int assignmentCounter = 0;
//Console.WriteLine("in If statement.. " + counter);
for (int moduleCounter = 0; moduleCounter < requiredLevelList().Count; moduleCounter++)
{
int totalNumberOfAssignmentsInCurrentModule = requiredLevelList().ElementAt(moduleCounter).Assignments.Count;
Console.WriteLine("total number of assignmetns: " + totalNumberOfAssignmentsInCurrentModule);
assignmentCounter = assignmentCounter + totalNumberOfAssignmentsInCurrentModule;
Console.WriteLine("assignment counter: " + totalNumberOfAssignmentsInCurrentModule);
if (counter < assignmentCounter)
{
Console.WriteLine("in If statement.. " + userMarksTBLvl4[moduleCounter].Text);
try
{
int userMark = int.Parse(userMarksTBLvl4[counter].Text);
requiredLevelList().ElementAt(moduleCounter).Assignments.ElementAt(counter).UsersScore = userMark;
double modAvg = requiredLevelList().ElementAt(moduleCounter).getModuleScoreOverall();
moduleOverallLvl4[moduleCounter].Text = modAvg.ToString();
break;
}
catch (FormatException) { break; }
}
else { }
}
如果用户有一个模块,它可以正常工作,但如果用户有两个或更多,那么我会在以下行中收到错误:
requiredLevelList().ElementAt(moduleCounter).Assignments.ElementAt(counter).UsersScore = userMark;
我遇到了越界异常。我知道为什么;这是因为计数器基本上是输入的文本框的#,但我使用计数器,我正在访问不在分配列表中的东西。这是问题发生时的示例:
用户有 2 个模块。在每个模块中有 2 个作业,因此创建了 4 个文本框,它们的索引范围为 0 - 3。如果用户想在第二个模块上输入他们的第一个作业的分数,它基本上是在尝试写入第三个索引然后该元素崩溃,因为该模块仅包含 2 个分配。
【问题讨论】: