foreach(Control c in tabAppreciation.Controls)
{
if(c is Button)
{
if((Button)c.Text.ToString()==0)
{
c.BackColor = Color.Green;
}
}
}
我收到此错误: 无法将类型'string'转换为'System.Windows.Forms.Button'
我想将每个Button的文字与某些内容进行比较,如果匹配,则更改按钮的颜色,但似乎我没有正确地做到这一点......有人可以帮我吗?
答案 0 :(得分:5)
您可以将代码更改为更简单的
foreach(Button b in tabAppreciation.Controls.OfType<Button>())
{
if(b.Text=="0")
{
b.BackColor = Color.Green;
}
}
这枚举了tabAppreciation
控件集合中Button类型的所有控件,并且您的循环是强类型的,因此您不再需要Is Button
的测试。另请注意,Text
属性已经是一个字符串,因此应用ToString()
毫无意义。最后一个字符串应该与一个字符串进行比较(将零写在双引号之间,而不是单引号表示一个字符串)
仅供参考:要使用OfType<T>
,如果它不存在,则需要在代码文件的顶部添加using System.Linq;
指令。
答案 1 :(得分:1)
试试这个:
tabAppreciation
.Controls
.Select( c => c as Button )
.Where( c => c != null )
.Where( b => b.Text.ToString() == "0" )
.ForEach( b => b.BackColor = Color.Green )
;
答案 2 :(得分:0)
易于阅读,并且会使问题背后的问题变得不那么相关。
foreach(Control c in tabAppreciation.Controls)
{
Button button = c as Button
if(button != null && button.Text == "0")
{
button.BackColor = Color.Green;
}
}
答案 3 :(得分:0)
你快到了。如果您在tabAppreciation.Controls
集合中有按钮控件,那么您需要做的就是比较文字(您在问题中说明:I wanna compare the text of each Button with something and if it matches
)。因此,将代码更改为以下内容:
foreach(Control c in tabAppreciation.Controls)
{
if(c is Button)
{
Button button = (Button)c;
if(button.Text=="Button text")
{
c.BackColor = Color.Green;
}
}
}
我不确定你为什么要检查你的文字是否等于一个数字。如果您的按钮文本显示一个数字,那么您需要注意,"0"
和0
之间存在差异 - 第一个是string类型,第二个是int类型(和{{1}又是一个不同的类型 - 角色)。
'0'
方法总是返回一个字符串,因此应该很容易构造条件(经验法则) - 条件运算符之间的两边应该具有相同的类型,所以在ToString()
之后必须有一个字符串 - ToString()=
或"0"
。
答案 4 :(得分:0)
(Button)c.Text.ToString()
正在尝试将Text属性转换为按钮。那是你的错误。实际上,您不需要将c对象转换为Button,因为Text属性是从ButtonBase继承的,它会覆盖Control类中的Text属性。 .NET框架足够聪明,知道你的意思是被覆盖的Text属性而不是基础属性。
要将c作为按钮访问,您需要创建一个新的按钮变量并将其值设置为c; Button b = c as Button
。
您也不需要在字符串上调用ToString()
。