"该控件不支持透明的背景色"是怎么回事?

future_wl 2008-02-07 07:35:26
我是在VISTA下使用.net2003的。在C#开发的一个窗体中想加入三个按钮控件,然后单击其中一个改变窗体颜色,加入以下代码:

private void firstform_Load(object sender, System.EventArgs e)
{
Button rd1=new Button();
Button rd2=new Button();
Button rd3=new Button();
rd1.Location =new System.Drawing.Point(0,0);
rd2.Location =new System.Drawing.Point(0,30);
rd3.Location =new System.Drawing.Point(0,60);
rd1.Text ="红";
rd2.Text ="白";
rd3.Text ="绿";
this.Controls.AddRange(new Control[] {rd1,rd2,rd3});
rd1.Click += new System.EventHandler(genericClick);
rd2.Click += new System.EventHandler(genericClick);
rd3.Click += new System.EventHandler(genericClick);

}
private void genericClick(object sender, System.EventArgs e)
{
Button rdb;
rdb=(Button)sender;
this.BackColor= Color.FromName(rdb.Text);
}
运行时选中一个颜色就会报错:

未处理的“System.ArgumentException”类型的异常出现在 system.windows.forms.dll 中。

其他信息: 该控件不支持透明的背景色。


是不是因为VISTA窗体本身的透明效果影响的呢?
...全文
1461 7 打赏 收藏 举报
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
mylove46 2008-02-07
不能用trans呗..
换个颜色
  • 打赏
  • 举报
回复
youzelin 2008-02-07
其中的Text文本无所谓,随便写写的
  • 打赏
  • 举报
回复
youzelin 2008-02-07

Button btn1 = null;
Button btn2 = null;
Button btn3 = null;

private void Form1_Load(object sender, EventArgs e)
{
btn1 = new Button();
btn2 = new Button();
btn3 = new Button();

btn1.Size = new Size(150, 50);
btn2.Size = new Size(150, 50);
btn3.Size = new Size(150, 50);

btn1.Location = new Point(5, 5);
btn2.Location = new Point(btn1.Right + 5, 5);
btn3.Location = new Point(btn2.Right + 5, 5);

btn1.Text = "Red";
btn2.Text = "0, 255, 0";
btn3.Text = "Transparent";

this.Controls.AddRange(new Control[] { btn1, btn2, btn3 });
this.btn1.Click += new EventHandler(btn_Click);
this.btn2.Click += new EventHandler(btn_Click);
this.btn3.Click += new EventHandler(btn_Click);
}

void btn_Click(object sender, EventArgs e)
{
this.TransparencyKey = Color.FromKnownColor(KnownColor.Control);
}
  • 打赏
  • 举报
回复
future_wl 2008-02-07
谢谢各位的帮助,在你们的提示下我找到问题了:
rdb.text会返回button控件的 text属性,在源代码中这个值是“红”、“白”、“绿”其中的一个,假设值为"红".
则Color.FromName(rdb.text)就成了Color.FromName("红"),系统是无法辨认汉字的意思的,所以只要把"红”改为“red",就可以了!
再次谢谢大家^_^
  • 打赏
  • 举报
回复
future_wl 2008-02-07
firstform下的opacity属性一直是100%,没有设置透明啊,还有别的原因吗?
  • 打赏
  • 举报
回复
sjm2003 2008-02-07
Button rdb;
rdb=(Button)sender;
this.BackColor= Color.FromName(rdb.Text);

其中的rdb返回generic的颜色是什么?

如果有返回的话,不因该是透明的背景颜色啊。会不会返回空啊
  • 打赏
  • 举报
回复
lextm 2008-02-07
不知道XP怎么样,不用XP好几个月了。

你把窗体的背景色设为透明估计是不行的。因为所有Control的背景色都是默认继承于Parent。那么Form透明了下面全部Control都要透明了,GDI+画得效果不知道会怎么样——估计会比较糟糕。
  • 打赏
  • 举报
回复
发帖
C#

10.8w+

社区成员

.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
帖子事件
创建了帖子
2008-02-07 07:35
社区公告

让您成为最强悍的C#开发者