67 lines
1.8 KiB
C#
67 lines
1.8 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Drawing;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Forms;
|
|
|
|
namespace videoGather
|
|
{
|
|
public class DoubleBufferedPanel : Panel
|
|
{
|
|
|
|
private Bitmap _backImage;
|
|
// 新增背景图属性
|
|
public Bitmap BackImage
|
|
{
|
|
get => _backImage;
|
|
set
|
|
{
|
|
if (_backImage != null)
|
|
{
|
|
_backImage.Dispose();
|
|
}
|
|
_backImage = value;
|
|
Invalidate(); // 触发重绘
|
|
}
|
|
}
|
|
// 构造函数
|
|
public DoubleBufferedPanel()
|
|
{
|
|
// 启用双缓冲
|
|
this.DoubleBuffered = true; // 内置支持
|
|
// 设置样式以避免闪烁
|
|
this.SetStyle(ControlStyles.OptimizedDoubleBuffer |
|
|
ControlStyles.AllPaintingInWmPaint |
|
|
ControlStyles.UserPaint, true);
|
|
}
|
|
|
|
protected override void OnPaintBackground(PaintEventArgs e)
|
|
{
|
|
// 禁用默认背景绘制(关键!)
|
|
// base.OnPaintBackground(e); // 注释掉这行
|
|
}
|
|
|
|
protected override void OnPaint(PaintEventArgs e)
|
|
{
|
|
// 绘制自定义背景图
|
|
if (_backImage != null)
|
|
{
|
|
e.Graphics.DrawImage(_backImage, ClientRectangle);
|
|
}
|
|
|
|
base.OnPaint(e); // 保持原有绘制逻辑
|
|
}
|
|
|
|
protected override void Dispose(bool disposing)
|
|
{
|
|
if (disposing)
|
|
{
|
|
_backImage?.Dispose();
|
|
}
|
|
base.Dispose(disposing);
|
|
}
|
|
}
|
|
}
|