无法将'string'类型转换为'System.Windows.Forms.Button'

时间:2015-06-05 21:09:13

标签: c# visual-studio-2013 casting

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的文字与某些内容进行比较,如果匹配,则更改按钮的颜色,但似乎我没有正确地做到这一点......有人可以帮我吗?

5 个答案:

答案 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()