Ich habe eine Reihe von Textfeldern, in denen sie sich dynamisch ändern, je nachdem, was der Benutzer eingibt. Diese Textfelder enthalten eine Zahl, die eine Punktzahl einer Aufgabe darstellt. Diese Punkte sind mit einem Modulobjekt verknüpft. Also wenn der Benutzer 3 Module hat; 2 Zuordnungen auf dem ersten und zweiten Modul und 3 Zuweisungen auf dem dritten Modul; dann würden insgesamt 7 Textfelder erstellt, damit der Benutzer alle seine Zuweisungszeichen eingeben kann.Out-of-Bounds Ausnahme bei der Verwendung von Arrays
Was ich versuche, ist, einen Keyup-Event-Handler zu erstellen, in dem es die vom Benutzer eingegebene Nummer abruft und dann dynamisch eine Methode aufruft, um den Durchschnitt des Moduls anzuzeigen. Das habe ich bisher. Die folgende Methode wird aufgerufen, wenn der Benutzer in einem Zeichen:
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 { }
}
es funktioniert gut, wenn der Benutzer ein Modul enthält, aber wenn der Benutzer zwei oder mehr hat, dann bekomme ich einen Fehler in der folgenden Zeile: requiredLevelList().ElementAt(moduleCounter).Assignments.ElementAt(counter).UsersScore = userMark;
Ich bekomme eine Ausnahme außerhalb der Grenzen. Ich weiß warum; Weil der Zähler im Grunde die Nummer des Textfelds ist, in das ich getippt habe, aber ich benutze den Zähler, greife ich auf etwas zu, das nicht in der Zuweisungsliste enthalten ist. Dies ist ein Beispiel, wenn das Problem auftritt:
Der Benutzer verfügt über 2 Module. In jedem Modul gibt es 2 Zuordnungen, also 4 Textfelder wurden mit ihrem Index von 0 bis 3 erstellt. Wenn der Benutzer seine Punkte der ersten Zuweisung auf dem zweiten Modul eingeben möchte, versucht er im Grunde, in den dritten Index zu schreiben Dieses Element stürzt dann ab, da dieses Modul nur aus 2 Zuordnungen besteht.