2013-05-13 74 views
3

我無法找到任何解決此錯誤的方法:/ im試圖將2個字母組合(例如aa ,ba,cb)乘以(aa * 3 = 4 * 3 ba * 2 = 3,5 * 2)。我的代碼是 ;c#無法將類型'System.Windows.Forms.Label'的對象轉換爲鍵入'System.Windows.Forms.TextBox'

string[] dersler = new string[9]; 
    double[] kredi = new double[9]; 
    double[] krediSonuclari = new double[9]; 

    double derscarp(double s1, double s2) 
    { 
     return s1 * s2; 
    } 
    private void button1_Click(object sender, EventArgs e) 
    { 

     int i=0; 
     int j = 0; 
     foreach (TextBox item in Controls) 
     { 
      if (item.Name.Substring(0,7)=="txtders") 
      { 
       dersler[i] = Convert.ToString(item.Text); 
       i++; 
      } 
     } 
     foreach (TextBox item in Controls) 
     { 
      if (item.Name.Substring(0, 8) == "txtkredi") 
      { 
       kredi[j] = Convert.ToDouble(item.Text); 
       j++; 
      } 
     } 

     double toplam =0; 
     for (int k = 0; k < 9; k++) 
     { 
+0

您是否試過'調試'代碼?我的意思是在'調試'模式下運行 – 2013-05-13 14:32:00

+0

線索出現在錯誤信息中...... – tomfanning 2013-05-13 14:32:32

回答

19
foreach (TextBox item in Controls) 

Controls包含一些控件不是文本框。
您的foreach聲明告訴編譯器將集合中的每個項目都轉換爲TextBox,這將不起作用。

相反,您可以撥打.OfType<TextBox>(),它將返回僅包含TextBox實例的集合的已過濾子序列。

+0

只是要注意這是在System.Linq中,它只能在.Net 3.5及更高版本中使用。 – CathalMF 2013-06-13 10:04:49

3

當你這樣做:

foreach (TextBox item in Controls) 
{ 
    if (item.Name.Substring(0,7)=="txtders") 
    { 
     dersler[i] = Convert.ToString(item.Text); 
     i++; 
    } 
} 

你承擔你的表單中的每個控件是一個文本框,這可能是不正確的。因爲它會嘗試將您的Label控件轉換爲TextBox,失敗並拋出錯誤。

試試這個:

foreach (Control ctrl in Controls) 
{ 
    TextBox item = ctrl as TextBox; 
    if (item != null) 
    { 
     if (item.Name.Substring(0,7)=="txtders") 
     { 
      dersler[i] = Convert.ToString(item.Text); 
      i++; 
     } 
    } 
} 
+0

感謝它的工作,但我只是得到另一個錯誤,如「輸入字符串不正確的格式。」我想我必須採取更多關於C#的課程:/感謝您的幫助:) – dacaroglu 2013-05-13 15:01:23

2

更換

foreach (TextBox item in Controls) //implicit cast. 

} 

foreach (Control ctrl in Controls) 
    if (ctrl is TextBox){ 
     TextBox tb = (Textbox)ctrl; //explicit cast 
    } 
} 

的foreach不會自動地挑選出控制的cherr ... ... EHM文本框集合,因此對於集合中的每個CONTROL,這不是一個TextBox,隱式轉換將會失敗。

相關問題