我无法找到解决此错误的任何内容:/我尝试将2个字母组合(例如aa,ba,cb)设置为乘数(aa * 3 = 4 * 3 ba * 2 = 3,5 * 2)。 我的代码是;
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 :(得分:19)
foreach (TextBox item in Controls)
Controls
包含一些不是文本框的控件
您的foreach
语句告诉编译器将集合中的每个项目强制转换为TextBox
,这将无效。
相反,您可以调用.OfType<TextBox>()
,它将返回仅包含TextBox
个实例的集合的已过滤子序列。
答案 1 :(得分: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++;
}
}
}
答案 2 :(得分: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 ...嗯...控件集合的文本框,因此对于集合中的每个CONTROL,这不是TextBox,隐式演员会失败。