我是在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窗体本身的透明效果影响的呢?

解决方案 »

  1.   

    不知道XP怎么样,不用XP好几个月了。你把窗体的背景色设为透明估计是不行的。因为所有Control的背景色都是默认继承于Parent。那么Form透明了下面全部Control都要透明了,GDI+画得效果不知道会怎么样——估计会比较糟糕。
      

  2.   

    Button   rdb; 
    rdb=(Button)sender; 
    this.BackColor=   Color.FromName(rdb.Text); 其中的rdb返回generic的颜色是什么?如果有返回的话,不因该是透明的背景颜色啊。会不会返回空啊
      

  3.   

    firstform下的opacity属性一直是100%,没有设置透明啊,还有别的原因吗?
      

  4.   

    谢谢各位的帮助,在你们的提示下我找到问题了:
    rdb.text会返回button控件的 text属性,在源代码中这个值是“红”、“白”、“绿”其中的一个,假设值为"红".
    则Color.FromName(rdb.text)就成了Color.FromName("红"),系统是无法辨认汉字的意思的,所以只要把"红”改为“red",就可以了!
    再次谢谢大家^_^
      

  5.   


    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);
    }
      

  6.   

    其中的Text文本无所谓,随便写写的