C# 尝试循环窗体上的按钮控件时出现“无法强制转换类型的对象”错误
在表单中,我添加了一个TableLayoutPanel,并在其中添加了5个按钮 在运行时,我在循环中向Form1添加10个按钮。然后我使用foreach来处理这10个按钮C# 尝试循环窗体上的按钮控件时出现“无法强制转换类型的对象”错误,c#,winforms,button,casting,tablelayoutpanel,C#,Winforms,Button,Casting,Tablelayoutpanel,在表单中,我添加了一个TableLayoutPanel,并在其中添加了5个按钮 在运行时,我在循环中向Form1添加10个按钮。然后我使用foreach来处理这10个按钮 foreach (Button C in this.Controls) // do something 运行程序时,出现一个错误: 无法将“System.Windows.Forms.TableLayoutPanel”类型的对象强制转换为“System.Windows.Forms.Button”类型 我认为发生此错误是
foreach (Button C in this.Controls)
// do something
运行程序时,出现一个错误:
无法将“System.Windows.Forms.TableLayoutPanel”类型的对象强制转换为“System.Windows.Forms.Button”类型
我认为发生此错误是因为TableLayoutPanel包含5个按钮
是的,我可以删除这个TableLayoutPanel并直接在表单中添加5个按钮,但是TableLayoutPanel在我的代码中帮助很大
那么,有没有任何解决方案可以遍历这10个按钮,同时仍然保留TableLayoutPanel
此外,我是否可以分别遍历窗体中的按钮和TableLayoutPanel中的按钮?窗体控件的类型为,因此您的代码可能无法运行!
请使用以下代码:
foreach (Control C in this.Controls)
{
// do something
}
或
控件的类型为,因此您的代码可能无法运行!
请使用以下代码:
foreach (Control C in this.Controls)
{
// do something
}
或
您当前的代码将尝试迭代表单上的所有控件,不管怎样,所有顶级控件。。您需要使用递归来迭代嵌套在其他控件中的所有控件,然后将每个控件强制转换为按钮,从而得到异常 只需指定要迭代的控件:
foreach (var button in this.Controls.OfType<Button>())
{
// now you'll iterate over just the Button controls
}
您当前的代码将尝试迭代表单上的所有控件,不管怎样,所有顶级控件。。您需要使用递归来迭代嵌套在其他控件中的所有控件,然后将每个控件强制转换为按钮,从而得到异常 只需指定要迭代的控件:
foreach (var button in this.Controls.OfType<Button>())
{
// now you'll iterate over just the Button controls
}
System.Windows.Forms.TableLayoutPanel'输入'System.Windows.Forms.Button'
正如错误所解释的那样,您尝试为无法进行类型转换的类型转换元素
原因:foreach循环
foreach (Button C in this.Controls) // Button is the wrong type caste
此.Controls将返回当前表单中的每个控件,这包括无法转换为按钮的其他表单元素,如TableLayoutPanel。因此,请按如下方式过滤它们
答复:
foreach (var C in this.Controls){
if(c.GetType()== typeof(Button)){
Button btn = (Button)item; //do work using this
}
}
注意:如果按钮位于另一个控制器内,此方法将不提供这些按钮。相反,您需要访问其中的特定控件和循环
System.Windows.Forms.TableLayoutPanel'输入'System.Windows.Forms.Button'
正如错误所解释的那样,您尝试为无法进行类型转换的类型转换元素
原因:foreach循环
foreach (Button C in this.Controls) // Button is the wrong type caste
此.Controls将返回当前表单中的每个控件,这包括无法转换为按钮的其他表单元素,如TableLayoutPanel。因此,请按如下方式过滤它们
答复:
foreach (var C in this.Controls){
if(c.GetType()== typeof(Button)){
Button btn = (Button)item; //do work using this
}
}
注意:如果按钮位于另一个控制器内,此方法将不提供这些按钮。相反,您需要访问其中的特定控件和循环