C#中使用Invalidate()与MouseMove方法刷新控件时,控件闪烁问题解决方法

1. 问题出现场景

当我们在使用C# 中的绘图功能时,如果需要动态改变控件UI的状态,比如绘制了一个圆,点击时填充圆颜色为绿色。那么我们必须使用Invalidate()函数进行刷新。运行程序之后会发现,控件闪烁的特别厉害,这完全达不到我们要的效果,特别是如果配合MouseMove()鼠标滑动事件使用时,这种效果会更明显。

2. 解决方案

目前用的比较稳定的解决方法是在类构造函数添加如下语句

//解决绘图时画面闪烁
SetStyle(ControlStyles.UserPaint, true);
SetStyle(ControlStyles.AllPaintingInWmPaint, true); // 禁止擦除背景.
SetStyle(ControlStyles.DoubleBuffer, true); // 双缓冲

其他解决方案,请参考:https://www.cnblogs.com/1175429393wljblog/p/5676741.html
我的方法也来自上述连接,特别感谢,特此声明

3. 其他

利用C#画图时,我们会发现画出来的图案锯齿比较严重,十分难看。以下是C#绘图抗锯齿设置。

g = e.Graphics;
g.SmoothingMode = SmoothingMode.HighQuality;  //图片柔顺模式选择
g.InterpolationMode = InterpolationMode.HighQualityBicubic;//高质量
g.CompositingQuality = CompositingQuality.HighQuality;//再加一点

你可能感兴趣的:(C#,winform,VS,2019)