【问题标题】:Button BackColor doesn't change按钮背景颜色不变
【发布时间】:2015-09-15 12:40:20
【问题描述】:

当按钮具有默认颜色时,我想更改按钮的颜色。我尝试使用下面的代码,但它不起作用。我该怎么做?

public void ClickedButton (object sender, EventArgs e)
{
    if ((sender as Button).BackColor == System.Drawing.SystemColors.Control) {
        (sender as Button).BackColor = Color.Turquoise;
    }
}

【问题讨论】:

  • 控件样式设置了吗?
  • 为什么不直接将sender 转换为局部变量,而不是进行两次as 转换?
  • 定义“不起作用”。这是wpf吗? AFAIK Button 没有 BackColor 属性,可能你使用了错误的命名空间
  • @juharr 作者可能不知道asis和casts的区别
  • @BinkanSalaryman 这就是我向他们指出这一点的原因。

标签: c# winforms colors system


【解决方案1】:

您需要添加调试行来验证按钮的当前颜色

public void ClickedButton (object sender, EventArgs e)
{
    // add debug line here 
    string message = (sender as Button).BackColor.ToString();
    Debug.WriteLine(message);

    if ((sender as Button).BackColor == System.Drawing.SystemColors.Control) {
        (sender as Button).BackColor = Color.Turquoise;
    }
}

这将有助于您对代码进行故障排除。您当前的代码也没有任何问题。下面是结果。

这是Output Window的结果:

【讨论】:

    【解决方案2】:

    先尝试将 sender 转换为 Button

    public void ClickedButton (object sender, EventArgs e)
    {
        var btn = sender as Button;
        if ((btn != null) && btn.BackColor == System.Drawing.SystemColors.Control)) {
            btn.BackColor = Color.Turquoise;
        }
    }
    

    如果这是一个 Windows 窗体控件,那应该可以工作。

    如果这是一个 Web 窗体控件,它可能不是(除非您将其作为回发的一部分调用)。

    【讨论】:

      猜你喜欢
      • 2015-10-25
      • 1970-01-01
      • 2020-03-10
      • 2013-06-24
      • 2014-05-17
      • 2023-02-22
      • 1970-01-01
      • 2017-03-25
      相关资源
      最近更新 更多