2010-12-16 41 views
1

我一直在寻找很多东西,看过几个例子,但他们至少对我没有任何作用。这就是我需要的:在我的应用程序中,我需要为工具栏使用透明的PNG图标,并且还需要可拖动的可视对象表示,即72x72“页面”图标,可以拖动并可能覆盖客户区域中的所有元素。对于第一个我正在考虑使用按钮,将其BackImage设置为透明PNG并将BackColor设置为“透明”:它不起作用,该按钮始终显示纯色。至于面板,同样的问题:我可以把一个透明的PNG作为背景图片,但是在PNG具有透明区域的地方,控件从不看起来“透明”。我认为与一个图片框和其他任何允许图像背景的控件一样。所以我想,这实际上是关于使控件的背景透明......任何想法?C#透明PNG按钮,面板...怎么样?

我不在乎我是否需要创建某种自定义的“图像按钮”或“图像面板” - 无论如何 - 真正具有PNG透明按钮,面板等!此外,请注意,它是关于PNG透明度,使用alpha通道,而不是透明像素,在这个年龄段,它吸引了恕我直言的GUI。

干杯

litium

+0

plz add输出图像? – 2010-12-17 06:03:23

回答

1

好吧,我发现下面的代码蒙山不仅对面板也为按钮,我想其他控件--except PictureBox的作品:

public class TransparentPanel : Panel <==change to Button for instance, and works 
    { 
     Timer Wriggler = new Timer(); 
     public TransparentPanel() 
     { 
      Wriggler.Tick += new EventHandler(TickHandler); 
      this.Wriggler.Interval = 500; 
      this.Wriggler.Enabled = true; 
     } 
     protected void TickHandler(object sender, EventArgs e) 
     { 
      this.InvalidateEx(); 
     } 
     protected override CreateParams CreateParams 
     { 
      get 
      { 
       CreateParams cp = base.CreateParams; 
       cp.ExStyle |= 0x00000020; //WS_EX_TRANSPARENT 
       return cp; 
      } 
     } 
     protected void InvalidateEx() 
     { 
      if (Parent == null) 
      { 
       return; 
      } 
      Rectangle rc = new Rectangle(this.Location, this.Size); 
      Parent.Invalidate(rc, true); 
     } 
     protected override void OnPaintBackground(PaintEventArgs pevent) 
     { 
      // Do not allow the background to be painted 
     } 
    } 

对我的作品100%!似乎不适用于PictureBoxes。