Хорошо, так что в итоге:C# Динамическое Отнесение управления
У меня есть 3 метки: lSectAvg1, lSectAvg2, lSectAvg3.
lMask ПРЕДОСТАВЛЯЕТСЯ динамически ссылаться на каждую из них посредством последовательных итераций этого метода, «CalcResults».
private void CalcResults(int[] numSet, int arrayCount, ref double max, ref double min)
{
int count = 0;
double sum = 0;
//lMask is assigned. First value is "lSectAvg1".
Control lMask = this.Controls["lSectAvg" + arrayCount.ToString()];
while (count < numSet.Count())
{
sum = sum + numSet[count];
if (numSet[count] > max)
max = numSet[count];
if (min == 0 || numSet[count] < min)
min = numSet[count];
count++;
}
//Basically: "lSectAvg1.Text is set to the average."
lMask.Text = (sum/count).ToString("n2");
}
Тем не менее, я в конечном итоге с ошибкой в последней строке кода: «объекта не задана ссылка на экземпляр объекта.»
Что дает? Должно ли «this.Controls» быть чем-то другим? Может быть проблема с областью моего метода/переменной «Контроль»?
В принципе: Есть что-то похожее на команду «EXEC» в SQL, которая будет выполнять строки как код?
Спасибо, миллион!
EDIT: Я также должен добавить, что значение lMask после ошибки выбрано «null».
Вы уверены, что 'arrayCount' установлен в '1 ', а не' 0'? – Rob
Оглядываясь назад, возможно, это не самый чистый способ вытащить это, но метод вызван с помощью: CalcResults (arrayJagged [count], count + 1, ref max, ref min); Итак, да, я подтвердил, что это 1. –
И что это такое? Это форма? Из того, что я помню, 'this.Controls' возвращает только детей, а не всех потомков. Поэтому вам может потребоваться изменить его на нечто вроде 'somePanel.Controls', если текстовые поля находятся внутри панели. – Rob