2015-08-27 53 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」是不同的東西?這可能是我的方法/「控制」變量的範圍問題嗎?

基本上是否有類似於SQL中執行字符串作爲代碼的「EXEC」命令?

非常感謝!

編輯:我還應該補充說明錯誤引發後lMask的值是「null」。

+1

確定'arrayCount'被置1 ',而不是'0'? – Rob

+0

事後看來,也許這不是最簡單的方法,但這種方法被稱爲: CalcResults(arrayJagged [count],count + 1,ref max,ref min); 所以,是的,我已經證實它是1. –

+2

什麼是'this'?這是形式嗎?從我記得,'this.Controls'只返回兒童,不是所有的後代。因此,如果文本框位於面板內,您可能需要將其更改爲'somePanel.Controls'。 – Rob

回答

0

DAMNIT。所以,在這一整天工作之後,我終於遇到了答案。

備案:如果您曾經嘗試引用類似於此處演示的內容,請確保您參考了其中包含的GroupBox。 gbAvg.lSectAvg1是答案。我應該在這個問題中包括這一點,但我甚至沒有意識到這是相關的。

不過,我很感謝大家的幫助。

現在,我已經浪費了上了太多的時間,我終於可以繼續前進用我的生命...........