解决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);
   }
}

参考链接:http://www.csframework.com/archive/1/arc-1-20170622-2307.htm

         www.csframework.com

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值