2014-03-18 93 views
0

我希望你能帮助我解决这个问题,附上视频以更简单的方式解释。背景面板Windows窗体

First example

面板(具有纹理背景)与标签(标签具有没有背景PNG图像) 活动:MouseDownMouseUpMouseMove。 正如你会注意到在视频拖动标签背景变成白色面板,并恢复其背景图像,当我停止拖动标签

面板控件具有透明背景作为属性,但用任何颜色改变背景,让发生的问题与物质有关,我不明白为什么会发生这种情况,以及如何解决问题。

Second Example

包含以上,与面板控制具有透明的背景,而不是唯一的区别,我选择了黑色的颜色为该属性

回答

0

你必须使用双缓冲和你没有要停止在背景上使用图像,您可以让所有内容都顺利运行。

你有几种方法可以做到这一点,快速的方式(大部分时间不够)是启用面板的doublebuffer

“缓慢”但更好的方法是使用Bitmap对象作为缓冲区来执行您自己的Double Buffer。 本示例创建一个“侧边缓冲区”并接受图像作为参数并使用创建的缓冲区进行绘制。

public void DrawSomething(Graphics graphics, Bitmap yourimage) 
{ 
    Graphics g; 
    Bitmap buffer = new Bitmap(yourimage.Width, yourimage.Height, graphics); 
    g = Graphics.FromImage(buffer); 
    g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; 

    g.DrawImage(yourimage, 0, 0); 

    graphics.DrawImage(buffer, 0, 0); 
    g.Dispose(); 
} 

在您的OnPaint事件中调用此函数。

顺便说一句...这只是一个双缓冲的例子。

干杯

0

将DoubleBuffered更改为适用于窗体和面板。我认为这应该解决你的问题。