【问题标题】:Why am I getting "Control does not support transparent background colors"?为什么我收到“控件不支持透明背景颜色”?
【发布时间】:2017-11-23 06:27:21
【问题描述】:

我正在开发一个 C# - Winforms 应用程序并尝试像这样设置只读文本框的背景颜色...

txtMyBox.BackColor = Color.FromName ("Red");

这是失败并显示错误消息...

System.ArgumentException was unhandled
Message=Control does not support transparent background colors.
Source=System.Windows.Forms

首先要做的事;这是为只读文本框设置背景颜色的正确方法吗?我为普通的文本框做了很多这样的事情,它似乎工作正常。

如果是的话,有人可以帮我解释一下“透明背景颜色”是什么,为什么我应该想要一个?我不认为我这样做;我只是想让背景改变颜色。

【问题讨论】:

标签: c# winforms


【解决方案1】:

相当老的帖子,但是...您以前尝试过吗?

public partial class MyForm : Form
{
    public MyForm()
    {
        this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);

        InitializeComponent();
    }
}

【讨论】:

    【解决方案2】:

    有点晚了 - 但最终帮助这个人 - 像我一样 - 根据 OPs 问题找到了这个页面:

    设置由

    生成的 Winforms Splitter 背景颜色时出现此错误
    Color.FromArgb(0xC9,0xD9,0xEB);
    

    解决方案是使用以下辅助方法生成颜色值:

    ColorTranslator.FromHtml("#C9D9EB") 
    

    这样可以避免生成透明度信息。

    【讨论】:

      【解决方案3】:

      更好的方法是:

      txtMyBox.BackColor = Color.Red;
      

      您得到的错误是由于您的代码中的其他地方您试图将表单本身的背景颜色设置为透明并且不受支持,请仔细检查您的代码,您会发现类似的东西:

      BackColor = Color.Transparent;
      

      由于没有元素名称(即 myControl.BackColor = somthing)并且您的句子以 BackColor = somthing 开头 - 编译器认为您想要将 windows 窗体的背景颜色更改为透明,请检查您的窗体编辑器 -你可以从那里开始。

      这是您的错误的重现:

      public partial class Form1 : Form
      {
          public Form1()
          {
              InitializeComponent();
              BackColor = Color.Transparent; //Control does not support transparent background colors.
          }
      }
      

      【讨论】:

      • 感谢您的提示,但我在与解决方案关联的任何文件中都找不到“透明”一词。
      • 它可能作为 ARGB(0,255,255,255) 中的颜色存在。仔细检查——我保证它在某个地方。另一种方法是尝试设置 Backcolor = 0
      • 对。我明天再试一次。再次感谢您的帮助。
      • 你是对的;它隐藏得很好,但我终于找到了它(BackColor = Color.FromColor("Some Colour that Doesn't Exist"))。再次感谢。
      【解决方案4】:

      试试这个而不是FromName

       txtMyBox.BackColor = Color.Red;
      

      【讨论】:

      • 那是仍然返回颜色的静态网络。如果不需要,不好用。但答案更多的是关于设置为 false 而不是 true 的 SupportsTransparentBackColor。
      • 不,他不想要透明背景。他在尝试设置背景颜色时遇到错误。
      • 我真的比用户更相信编译器。
      【解决方案5】:
      ColorTextBox.BackColor = colorDialog1.Color;
      textBox2.BackColor = System.Drawing.Color.FromArgb(
                           ColorTextBox.BackColor.ToArgb()); 
      

      【讨论】:

        猜你喜欢
        • 2019-09-29
        • 1970-01-01
        • 1970-01-01
        • 2012-11-05
        • 2012-06-26
        • 1970-01-01
        • 2013-02-05
        • 2015-02-10
        • 1970-01-01
        相关资源
        最近更新 更多