我是在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窗体本身的透明效果影响的呢?
{
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窗体本身的透明效果影响的呢?
rdb=(Button)sender;
this.BackColor= Color.FromName(rdb.Text); 其中的rdb返回generic的颜色是什么?如果有返回的话,不因该是透明的背景颜色啊。会不会返回空啊
rdb.text会返回button控件的 text属性,在源代码中这个值是“红”、“白”、“绿”其中的一个,假设值为"红".
则Color.FromName(rdb.text)就成了Color.FromName("红"),系统是无法辨认汉字的意思的,所以只要把"红”改为“red",就可以了!
再次谢谢大家^_^
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);
}