看了网上很多将PictureBox.Image的图片背景设置成透明的方法,大多数也都尝试了.
如使用透明Gif图片、Bitmap.MakeTransparent、BackColor=clTransparent等等。
但是总是发现:当图片下层的控件变化的时候,图片还是保持原来的样子,也就是说,这类透明的方法只是把图片背景用当时设置时的底色绘了一遍,并不是真正的透明。
不知大家有没有碰到这样的问题?应该如何解决呢?谢谢。
另:我的这个PictureBox以及背景是在一个自定义控件中的,不知跟这个有没有关系?

解决方案 »

  1.   

    哎,哪位大侠帮帮忙吧...
    在Delphi中这个背景透明根本不是问题的,怎么到了C#里这么难弄?
      

  2.   

    to 这类透明的方法只是把图片背景用当时设置时的底色绘了一遍,并不是真正的透明。基本上都是这样做法,而且这样比较简洁,如果你想做真正的透明,自己去画,即一个pixel一个pixel去设置Color值。
      

  3.   

    获取当前窗体背景色bgColor,然后bgColor填充PicTureBox的背景颜色..再设置PictureBox的字体颜色..就可以模拟出透明的效果了.
      

  4.   

    可是如果PictureBox后面的窗体内容在不断变化的话怎么办呢?
      

  5.   

    如果你的  窗体  backgroundimage属性加载图片的话,你设置 picturebox 透明就有用了
      

  6.   

    可是我的PictureBox后面是个Panel...,Panel后面是我的自定义控件,然后才是Form,我设置窗体的BackgroundImage属性跟它有关系吗?
      

  7.   

    对 要实现在Delphi中这个背景透明很难,这是.net 的不足,希望在以后版本能弥补
      

  8.   

    2005不知道是什么样的。
    2003我是这样做的。
    第一,图片处理成透明的(自己不做,叫别人做的)
    第二,Panel设为透明背景。
    第三,PictureBox设为透明背景。
    第四,PictureBox的Image设为处理好的前景图片。
    应该可以做到。
    除了窗体,其它的容器背景都设为透明。
      

  9.   

    这样能透明也
    ((Bitmap)this.pictureBox1.Image).MakeTransparent(Color.White);
    this.pictureBox1.BackColor = Color.Transparent;
      

  10.   

    to BigIdiot628:
    我的图片所在Panel的父容器是一个自定义的控件,而自定义控件的背景色无法设为透明....
    to wfhlx1:
    你所说的就是我一开始列出来的方法之一,如果你变换该PictureBox背后的控件,会发现"透明"区域没有刷新....
      

  11.   

    试过了的,怎么refresh都不行啊...
      

  12.   

    而且我发现,如果把底层父容器(如Form或userControl)的BackgroundImage设成某个图片,那么不管该PictureBox和底层容器之间是否隔着其它的控件(并非PictureBox的父容器),PictureBox都将透明部分刷新为底层容器的图案,好像中间不存在其它控件似的.
    这是不是.net的一个Bug呢?