解决Winform背景图片闪烁的问题
解决Winform背景图片闪烁的问题Winform窗体,里面放置了一个Panel,Dock属性为Fill,BackgroundImage使用一个本地图片文件,
BackgroundImageLayout使用了Stretch。嵌入图片的Panel作为Winform应用程序的背景,这个界面现在有两个问题:
1、在窗体第一次被打开时,背景图片会出现明显的闪烁
2、在拉动窗体的边界以调整窗体大小时,背景图片非出现明显的闪烁

解决方案:
需要新建一个PanelEnhanced类继承Panel类,代码如下:
C# Code:
/// <summary>
/// 加强版 Panel
/// </summary>
class PanelEnhanced : Panel
{
/// <summary>
/// OnPaintBackground 事件
/// </summary>
/// <param name="e"></param>
protected override void OnPaintBackground(PaintEventArgs e)
{
// 重载基类的背景擦除函数,
// 解决窗口刷新,放大,图像闪烁
return;
}
/// <summary>
/// OnPaint 事件
/// </summary>
/// <param name="e"></param>
protected override void OnPaint(PaintEventArgs e)
{
// 使用双缓冲
this.DoubleBuffered = true;
// 背景重绘移动到此
if (this.BackgroundImage != null)
{
e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
e.Graphics.DrawImage(
this.BackgroundImage,
new System.Drawing.Rectangle(0, 0, this.Width, this.Height),
0,
0,
this.BackgroundImage.Width,
this.BackgroundImage.Height,
System.Drawing.GraphicsUnit.Pixel);
}
base.OnPaint(e);
}
}
//来源:C/S框架网(www.csframework.com) QQ:1980854898
/// <summary>
/// 加强版 Panel
/// </summary>
class PanelEnhanced : Panel
{
/// <summary>
/// OnPaintBackground 事件
/// </summary>
/// <param name="e"></param>
protected override void OnPaintBackground(PaintEventArgs e)
{
// 重载基类的背景擦除函数,
// 解决窗口刷新,放大,图像闪烁
return;
}
/// <summary>
/// OnPaint 事件
/// </summary>
/// <param name="e"></param>
protected override void OnPaint(PaintEventArgs e)
{
// 使用双缓冲
this.DoubleBuffered = true;
// 背景重绘移动到此
if (this.BackgroundImage != null)
{
e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
e.Graphics.DrawImage(
this.BackgroundImage,
new System.Drawing.Rectangle(0, 0, this.Width, this.Height),
0,
0,
this.BackgroundImage.Width,
this.BackgroundImage.Height,
System.Drawing.GraphicsUnit.Pixel);
}
base.OnPaint(e);
}
}
//来源:C/S框架网(www.csframework.com) QQ:1980854898
参考文档:
新增功能:保存前本地缓存数据,资料暂存解决方案 - Winform开发框架
Winform软件快速开发平台 - 关于数据权限,表格列权限控制两种解决方案
Winform快速开发框架之存储图片资源解决方案|C/S框架网
Winform+DevExpress框架之独立图片存储解决方案|C/S框架网
C# Winform的CheckListBox控件灰掉勾选项目解决方案
C# Winform 开发框架 - 业务单据附件管理解决方案(原)
C/S软件授权注册系统V3.0(Winform+WebApi+.NET8+EFCore版本)|C/S开发框架
企业级C/S系统快速开发框架(Winform+.NET8+EFCore)|C/S开发框架
.NET代码生成器V6.1 - 快速生成Winform窗体代码
WinFormsApp窗体应用快速开发框架(.NET7+EFCore+VS2022)
VS2022解决方案部署DevExpress组件(DevExpress Project Settings)|C/S开发框架
塑胶板材行业ERP系统软件开发平台(VS2022+C#+Winform)
PLC,上位机软件快速开发框架(VS2022+C#+Winform)
Winform框架通用导入程序,支持Excel,xls/xlsx格式|C/S开发框架
Winform开发框架 - 类库同时支持.NETFramework以及.NET Core
Winform C/S结构与Web B/S结构开发MES/ERP系统优缺点及区别|C/S开发框架
新增功能:保存前本地缓存数据,资料暂存解决方案 - Winform开发框架
Winform软件快速开发平台 - 关于数据权限,表格列权限控制两种解决方案
Winform快速开发框架之存储图片资源解决方案|C/S框架网
Winform+DevExpress框架之独立图片存储解决方案|C/S框架网
C# Winform的CheckListBox控件灰掉勾选项目解决方案
C# Winform 开发框架 - 业务单据附件管理解决方案(原)
C/S软件授权注册系统V3.0(Winform+WebApi+.NET8+EFCore版本)|C/S开发框架
企业级C/S系统快速开发框架(Winform+.NET8+EFCore)|C/S开发框架
.NET代码生成器V6.1 - 快速生成Winform窗体代码
WinFormsApp窗体应用快速开发框架(.NET7+EFCore+VS2022)
VS2022解决方案部署DevExpress组件(DevExpress Project Settings)|C/S开发框架
塑胶板材行业ERP系统软件开发平台(VS2022+C#+Winform)
PLC,上位机软件快速开发框架(VS2022+C#+Winform)
Winform框架通用导入程序,支持Excel,xls/xlsx格式|C/S开发框架
Winform开发框架 - 类库同时支持.NETFramework以及.NET Core
Winform C/S结构与Web B/S结构开发MES/ERP系统优缺点及区别|C/S开发框架
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
在线客服
