C# 背景面板窗口窗体
我希望你能帮助我解决这个问题,附上视频以更简单的方式解释 带有标签的面板(具有纹理背景)(标签具有无背景的png图像) 事件:C# 背景面板窗口窗体,c#,winforms,C#,Winforms,我希望你能帮助我解决这个问题,附上视频以更简单的方式解释 带有标签的面板(具有纹理背景)(标签具有无背景的png图像) 事件:MouseDown、MouseUp和MouseMove。 正如您在拖动标签的视频中所注意到的,当我停止拖动标签时,背景将变为白色面板并恢复其背景图像 面板控件有一个透明的背景作为属性,但改变背景的任何颜色,让问题发生相关的物质,我不明白为什么会发生这种情况,以及如何修复较少 包含上述内容,唯一的区别是面板控制而不是透明背景,我为该属性选择了黑色您必须使用双缓冲区,并且
MouseDown
、MouseUp
和MouseMove
。
正如您在拖动标签的视频中所注意到的,当我停止拖动标签时,背景将变为白色面板并恢复其背景图像
面板控件有一个透明的背景作为属性,但改变背景的任何颜色,让问题发生相关的物质,我不明白为什么会发生这种情况,以及如何修复较少
包含上述内容,唯一的区别是面板控制而不是透明背景,我为该属性选择了黑色您必须使用双缓冲区,并且您不必停止在背景上使用图像,您可以让一切顺利运行 有两种方法可以做到这一点,快速的方法(大部分时间不够)是启用面板的
doublebuffer
“慢”但更好的方法是使用位图对象作为缓冲区来执行自己的双缓冲区。
本例创建“侧缓冲区”,并接受图像作为参数,并使用创建的缓冲区绘制图像
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活动中调用此选项
顺便说一句。。。这只是一个双缓冲区示例
欢呼声将窗体和面板的DoubleBuffered更改为true。我认为这应该可以解决您的问题。这是完全正常的,因为基于
系统.Windows.Forms.Control
的项目并不是设计用来执行这种高级图形操作的。
事实上,在这里发生这种效果的原因是,当您将255以外的任何值指定给控件的alpha组件BackColor
,当您更改控件大小或位置时,表单会执行以下操作:
- 第二种方法是使用WPF而不是windows窗体,因为WPF正是为了做这类事情而设计的