我想做一个圆角矩形的窗体,用BMP画了个背景,四个角用青色填充,在OnLoad里加入如下代码:
Bitmap bm = this.BackgroundImage as Bitmap;
bm.MakeTransparent(bm.GetPixel(0,0));
this.TransparencyKey = bm.GetPixel(0,0);
实现了四个角的透明,可窗体上label,button等控件上的文字也变成透明的了(如果是有背景的button则正常),是我用的方法不对吗?应该如何更改?
先谢过大家了!

解决方案 »

  1.   

    to 可窗体上label,button等控件上的文字也变成透明的了(如果是有背景的button则正常),是我用的方法不对吗?应该如何更改?修改label和button上的背景颜色,不要和TransparencyKey 的颜色一样即可。
      

  2.   

    to 修改label和button上的背景颜色,不要和TransparencyKey 的颜色一样即可。我的字体设的是黑色,label的背景色是Transparent,我把label的背景设成其他颜色还是一样的结果,文字是透明的
      

  3.   

    难道要给每个label设置image不成?
      

  4.   

    to 我的字体设的是黑色,label的背景色是Transparent,我把label的背景设成其他颜色还是一样的结果,文字是透明的修改修改label和button上的forecolor
      

  5.   

    你的现象可能是穿透色为黑色,所以把label和button上的forecolor不要设置为黑色。
      

  6.   

    to Knight94(愚翁) 
    你说的对,字体设成其他色就可以了,可为什么我的穿透色会变成黑色呢?我的图片的四个角都是青色的,我设的是图片(0,0)位置的颜色为透明色,我在FORM属性里选的也是透明色也是青色,而且从运行结果看我的图片四角也变透明了,
    为什么也变成透明色了?
      

  7.   

    你最好看看TransparencyKey的值是什么
      

  8.   

    执行
    bm.MakeTransparent(bm.GetPixel(0,0));
    后,图像四角变成了黑色,给TransparencyKey赋值就成了黑色,所以黑色就变透明了。MakeTransparent不是使指定颜色对此bitmap透明吗?怎么会把那个颜色变成黑色呢?不用这条语句图片四角又不会透明,有什么办法可以解决吗?多谢了
      

  9.   

    change 
    Bitmap bm = this.BackgroundImage as Bitmap;
    bm.MakeTransparent(bm.GetPixel(0,0));
    this.TransparencyKey = bm.GetPixel(0,0);with
    Bitmap bm = this.BackgroundImage as Bitmap;
    this.TransparencyKey = bm.GetPixel(0,0);
      

  10.   

    to Knight94(愚翁)
    可是我如果不写bm.MakeTransparent(bm.GetPixel(0,0));运行时会显示青色的四个色,不会变成透明多谢你耐心的回答,即使最终不能解决我也要把分加给你,多谢了。
      

  11.   

    to 可是我如果不写bm.MakeTransparent(bm.GetPixel(0,0));运行时会显示青色的四个色,不会变成
    透明为什么一定需要这一句
    bm.MakeTransparent(bm.GetPixel(0,0));transparentkey不是已经设定了穿透颜色,它会进行过滤的。
      

  12.   

    是啊,可是transparentkey有个BUG,在非24位模式下会不正常
    我是按http://www.microsoft.com/china/MSDN/library/netFramework/netframework/WindowsForms.mspx?mfr=true
    这篇文章写的程序,结果就是上面那样,黑色变成了透明色
      

  13.   

    看起来只能用这个方法了:
    http://allancandy.cnblogs.com/archive/2005/09/01/227814.html多谢各位,告别是Knight94(愚翁) ,多谢了。
      

  14.   

    那你可以如下试试:
    Bitmap bm = this.BackgroundImage as Bitmap;
    bm.MakeTransparent(bm.GetPixel(0,0));Bitmap bitNew = new Bitmap( bm.Width, bm.Height );
    Graphics g = Graphics.FromImage( bitNew );
    g.FillRectangle( Brushes.White/* Set transparent color here*/, 0, 0, bm.Width, bm.Height );
    g.DrawImage( bitNew, 0, 0 );//Redraw image in specific back color
    g.Dispose();this.TransparencyKey = Color.White;//Set transparent key