2015-08-27 3 views
0

Хорошо, так что в итоге: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».

+1

Вы уверены, что 'arrayCount' установлен в '1 ', а не' 0'? – Rob

+0

Оглядываясь назад, возможно, это не самый чистый способ вытащить это, но метод вызван с помощью: CalcResults (arrayJagged [count], count + 1, ref max, ref min); Итак, да, я подтвердил, что это 1. –

+2

И что это такое? Это форма? Из того, что я помню, 'this.Controls' возвращает только детей, а не всех потомков. Поэтому вам может потребоваться изменить его на нечто вроде 'somePanel.Controls', если текстовые поля находятся внутри панели. – Rob

ответ

0

DAMNIT. Итак, после работы на этом весь день, я наконец наткнулся на ответ.

Для справки: если вы когда-либо пытаетесь ссылаться на что-то похожее на то, что было продемонстрировано здесь, УБЕДИТЕСЬ, ЧТО ВЫ СПРАШИВАЕТЕ ГРУППУ, КОТОРОЙ СОДЕРЖИТСЯ В КАЧЕСТВЕ. gbAvg.lSectAvg1 был ответом. Я должен был включить это в вопрос, но я даже не понимал, что это актуально.

Тем не менее, я ценю помощь, все.

Теперь, когда я потратил полностью слишком много времени на это, я могу, наконец, двигаться дальше с моей жизнью ...........

Смежные вопросы