欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > 记录|Form1中嵌套Form2时的频闪问题解决[不同于常见的三部曲]

记录|Form1中嵌套Form2时的频闪问题解决[不同于常见的三部曲]

2025/2/23 7:19:59 来源:https://blog.csdn.net/qq_41714549/article/details/141644326  浏览:    关键词:记录|Form1中嵌套Form2时的频闪问题解决[不同于常见的三部曲]

目录

  • 前言
  • 一、常见的解决方案
  • 二、自己创建渐变色组件GradientPanel
  • 三、最终效果展示
  • 更新时间


前言

参考文章:
C#画图解决闪烁问题
[解决winform中重绘时控件闪烁的问题](panel1.GetType().GetProperty(“DoubleBuffered”,System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).SetValue(panel1, true, null)😉
参考视频:
C# WinForm 制作一个渐变背景Panel

没想到进行自动化页面布局后,Form之间的嵌套会出现频闪问题。
在这里插入图片描述

尝试了常见的设置双缓冲方法,给组件,给Form都试过,结果都无法解决闪屏的问题。
后来直接采用视频中的自己创建组件的方式解决了问题。


一、常见的解决方案

  • 就是开启组件的双缓冲方法
panel1.GetType().GetProperty("DoubleBuffered",System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).SetValue(panel1, true, null);

或者

this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.ResizeRedraw |ControlStyles.AllPaintingInWmPaint, true);

二、自己创建渐变色组件GradientPanel

  • 就是创建个.cs类,只是里面的写法没见过,哈哈哈,现在长知识了。这边将完整代码放到下面:
/** 功 能:     渐变色Panel* 创建时间:  2024/8/27 21:18:19* 创建人:     小白鼠零号
*/
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace ZHCH_winform_2.manager
{public class GradientPanel : Panel{private Color exColor1 = Color.Lime;[Category("EX属性")][DefaultValue(typeof(Color), "Lime")]public Color EXColor1{get { return exColor1; }set { exColor1 = value; Invalidate(); }}private Color exColor2 = Color.Blue;[Category("EX属性")][DefaultValue(typeof(Color), "Blue")]public Color EXColor2{get { return exColor2; }set { exColor2 = value; Invalidate(); }}private float exAngle = 45f;[Category("EX属性")][DefaultValue(typeof(float), "45")]public float EXAngle{get { return exAngle; }set { exAngle = value; Invalidate(); }}public GradientPanel(){//DoubleBuffered = true;this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.ResizeRedraw | ControlStyles.AllPaintingInWmPaint, true);}protected override void OnPaint(PaintEventArgs e){base.OnPaint(e);e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;LinearGradientBrush brush = new LinearGradientBrush(ClientRectangle, exColor1, exColor2, exAngle);e.Graphics.FillRectangle(brush, ClientRectangle);}}
}

三、最终效果展示

在这里插入图片描述


更新时间

  • 2024.08.27:创建
  • 2024.08.28:找到正确的解决方案。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词