为什么我得到“控件不支持透明背景颜色”?

时间:2012-05-14 15:25:33

标签: c# winforms

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

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

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

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

首先要做的事情;这是为只读文本框设置背景颜色的正确方法吗?我正在为普通的文本框做很多事情,看起来效果很好。

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

5 个答案:

答案 0 :(得分:4)

很老的帖子但是......你以前试过这个吗?

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

        InitializeComponent();
    }
}

答案 1 :(得分:2)

更好的方法是:

txtMyBox.BackColor = Color.Red;

你得到的错误是由于你的代码中的其他地方,你试图将表单本身的背景颜色设置为透明而且不支持,请仔细检查你的代码,你会发现这样的事情:

BackColor = Color.Transparent;

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

以下是错误的再现:

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

答案 2 :(得分:0)

尝试使用此代替FromName

 txtMyBox.BackColor = Color.Red;

答案 3 :(得分:0)

ColorTextBox.BackColor = colorDialog1.Color;
textBox2.BackColor = System.Drawing.Color.FromArgb(
                     ColorTextBox.BackColor.ToArgb()); 

答案 4 :(得分:0)

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

设置由

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

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

ColorTranslator.FromHtml("#C9D9EB") 

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