C#解决在Winform中绘图异常闪烁问题

1,问题描述:

  • 在winform中使用Graphics进行绘图,绘图效果却呈现异常闪烁。

2,解决办法:

  • 使用  SetStyle()  设置相应特性:
SetStyle(ControlStyles.UserPaint, true);
SetStyle(ControlStyles.AllPaintingInWmPaint, true);   //   禁止擦除背景.
this.SetStyle(ControlStyles.DoubleBuffer, true);   //   双缓冲
  • 建立临时对象,在临时对象上绘制完成后再一次性赋值给控件。
 Bitmap map = new Bitmap(panel1.Width, panel1.Height);using (Graphics g = Graphics.FromImage(map)){g.Clear(SystemColors.Control);g.FillPie(Brushes.SlateBlue, rec, 0, 360 - availDegree);//计算字符串插入位置坐标double degree = ((360 - availDegree) / 180 * Math.PI) / 2;Point center = new Point(rec.X + panel1.Width / 2, rec.Y + panel1.Height / 2);PointF p1 = new PointF((float)(center.X + Math.Cos(degree) * (min / 2)), (float)(center.Y + Math.Sin(degree) * (min / 2)));g.DrawString($"已使用:{Math.Round((1 - pc.AvailablePhysicalMemory * 1.0 / pc.TotalPhysicalMemory) * 100, 2, MidpointRounding.AwayFromZero)}%", new Font("微软雅黑", 8, FontStyle.Bold), Brushes.Red, new Point(10, 10));g.FillPie(Brushes.Green, rec, 360 - availDegree, availDegree);}panel1.BackgroundImage = map;

3,注意点:

 protected void SetStyle(ControlStyles flag, bool value);

该方法属于protected类型位于Control类中,即只能在Control类中被调用或者在继承自Control的子类中被调用

所以在继承自Control的类Form1中可以被直接调用:

this.SetStyle(ControlStyles.UserPaint, true);this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);   //   禁止擦除背景.this.SetStyle(ControlStyles.DoubleBuffer, true);   //   双缓冲

但是如果想将其应用于Form1类中定义的panel01对象则必须通过反射进行设置。

//因为该方法是保护类型protect 只能在自己类或者其继承类中调用,所以这里用反射System.Reflection.MethodInfo method = typeof(Panel).GetMethod("SetStyle", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);method.Invoke(panel1, new object[] { ControlStyles.AllPaintingInWmPaint | ControlStyles.DoubleBuffer | ControlStyles.UserPaint, true });

亦或是在派生自Panel的类型中进行设置。

 class CustomPanel:Panel{public CustomPanel(){this.SetStyle(ControlStyles.UserPaint | ControlStyles.DoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/664425.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis常用数据类型--Hash

Hash 常用命令HSETHGETHEXISTSHDELHKEYS/HVALSHGETALLHMGETHLENHSETNXHINCRBY/HINCRBYFLOAT 内部编码典型应用场景 常用命令 HSET 设置 hash 中指定的字段(field)的值(value) HSET key field value [field value ...]时间复杂度…

Django的web框架Django Rest_Framework精讲(二)

文章目录 1.自定义校验功能(1)validators(2)局部钩子:单字段校验(3)全局钩子:多字段校验 2.raise_exception 参数3.context参数4.反序列化校验后保存,新增和更新数据&…

适用在Windows、Linux和macOS环境下打包Go应用程序的详细步骤和命令

在Go语言中,跨平台是一项强大的特性,使得开发者可以轻松地在不同操作系统上构建应用程序。然而,当我们需要分享或部署我们的Go应用时,通常需要将其打包成可执行文件,并确保在不同的操作系统上能够顺利运行。接下来将详…

起心动念 | 生成式 AI 开发实践系列的开端

生成式 AI 和大模型的技术变革力量,正在逐渐影响着我们当下这个时代,全球各行各业都呈现百舸争流、万象更新的趋势。在 2023 年,我们通过各种面向开发者的活动,收集到了大量开发者关于基于生成式 AI 的开发内容需求和建议反馈。开…

Boosting semantic human matting with coarse annotations

前向推理在modelscope中开源了,但是训练没开源,且是基于TensorFlow的,复现起来是比较麻烦的。 1.Introduction 分割技术主要集中在像素级二元分类,抠图被建模为前景图像F和背景图像B的加权融合,大多数matte方法采用指…

HiSilicon352 android9.0 开机视频调试分析

一,开机视频概念 开机广告是在系统开机后实现播放视频功能。 海思Android解决方案在原生Android基础上,增加了开机视频模块,可在开机过程中播放视频文件,使用户更好的体验系统开机过程。 二,模块结构 1. 海思自研开机…

面试 JavaScript 框架八股文十问十答第一期

面试 JavaScript 框架八股文十问十答第一期 作者:程序员小白条,个人博客 相信看了本文后,对你的面试是有一定帮助的!关注专栏后就能收到持续更新! ⭐点赞⭐收藏⭐不迷路!⭐ 1)JavaScript有哪些…

Linux 高并发服务器

多进程并发服务器 使用多进程并发服务器时要考虑以下几点&#xff1a; 父进程最大文件描述个数(父进程中需要close关闭accept返回的新文件描述符)系统内创建进程个数(与内存大小相关)进程创建过多是否降低整体服务性能(进程调度) server /* server.c */ #include <stdio…

IDEA反编译Jar包

反编译步骤 使用IDEA安装decompiler插件 找到decompiler插件文件夹所在位置&#xff08;IDEA安装路径/plugins/java-decompiler/lib &#xff09;&#xff0c;将需要反编译的jar包放到decompiler插件文件夹下&#xff0c;并创建一个空的文件夹&#xff0c;用来存放反编译后的…

电子信息考博目标院校

电子信息考博 1.目标院校 第一志愿 武汉大学 211计算机学院(2024年度) 085400电子信息 新一代信息通信技术&#xff08;卓工博士专项&#xff09; 外语水平考试科目 1101英语 卓工博士专项计划详见专项简章 212电子信息学院(2024年度) 085400电子信息 新一代信息通信…

AJAX-常用请求方法和数据提交

常用请求方法 请求方法&#xff1a;对服务器资源&#xff0c;要执行的操作 axios请求配置 url&#xff1a;请求的URL网址 method&#xff1a;请求的方法&#xff0c;如果是GET可以省略&#xff1b;不用区分大小写 data&#xff1a;提交数据 axios({url:目标资源地址,method…

【C语言】异常处理 | assert函数 | errno错误码

文章目录 C语言传统的处理错误的方式1. 终止程序&#xff08;例如使用 assert&#xff09;2. 返回/设置错误码手动实现C语言库函数内置的错误码Linux系统调用内置的错误码 C语言传统的处理错误的方式 C语言传统的处理错误的方式主要包括assert终止程序和返回或设置错误码两种方…

Django的web框架Django Rest_Framework精讲(三)

文章目录 1.DRF视图1) 视图基类1.GET请求2.POST请求&#xff0c;添加单条记录3.更新单条记录put方法4.DELETE请求 2) GenericAPIView[通用视图类] 2.视图类中使用多个序列化器类的方法3.基于视图扩展类的视图接口1&#xff09;ListModelMixin2&#xff09;CreateModelMixin3&am…

如何远程操控vm虚拟机(finalshell版)

你是否因为虚拟机命令行操作不便而头疼&#xff1f;是否因为难以复制粘贴而烦恼&#xff1f;是否因为无法快速上传文件而烦躁&#xff1f; 别急&#xff01;现在有一个简单便捷的软件能够实现上述你所述说的所有烦恼&#xff0c;请听我细细道来~ 一、查看虚拟机的ip地址 a.首…

python-分享篇-GUI界面开发-PyQt5-窗体代码与逻辑代码分离

代码 # _*_ coding:utf-8 _*_ # 文件名称&#xff1a;LoginWindows.py # 开发工具&#xff1a;PyCharmimport sys # 导入操作系统模块from PyQt5.QtCore import QCoreApplication # 导入PyQt5的QtCore模块 from PyQt5.QtWidgets import QApplication,QMainWindow # 导入P…

Spring Boot解决跨域问题的3种方案

前后端分离大势所趋&#xff0c;跨域问题更是老生常谈&#xff0c;随便用标题去google或百度一下&#xff0c;能搜出一大片解决方案&#xff0c;那么为啥又要写一遍呢&#xff0c;不急往下看。 文章目录 问题背景&#xff1a;解决办法&#xff1a;第一种办法&#xff1a;第二种…

【game——关机程序】

程序运行后&#xff0c;会在1分钟内关机&#xff0c;用户需要输入&#xff1a;lalala&#xff0c;才能停止电脑关机。 电脑内有操作命令符&#xff0c;可以实现关机&#xff1a; 最后按一下回车&#xff1a; #include<stdio.h> #include<stdlib.h> #include<s…

分类预测 | Matlab实现GAF-PCNN-MATT格拉姆角场和双通道PCNN融合多头注意力机制的分类预测/故障识别

分类预测 | Matlab实现GAF-PCNN-MATT格拉姆角场和双通道PCNN融合多头注意力机制的分类预测/故障识别 目录 分类预测 | Matlab实现GAF-PCNN-MATT格拉姆角场和双通道PCNN融合多头注意力机制的分类预测/故障识别分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现G…

【Crypto | CTF】BUUCTF Alice与Bob1

天命&#xff1a;比较简单的题目 先用Python生成一个脚本&#xff0c;分解两个素数 def prime_factors(n):"""分解给定整数n的质因数。返回一个列表&#xff0c;其中包含n的所有质因数。"""# 初始化一个空列表来存储质因数factors []# 从2开始…

十、Qt三维图表

一、Data Visualization模块概述 Data Visualization的三维显示功能主要有三种三维图形来实现&#xff0c;三各类的父类都是QAbstract3DGraph&#xff0c;从QWindow继承而来。这三类分别是&#xff1a;三维柱状图Q3DBar三维空间散点Q3DScatter三维曲面Q3DSurface 1、相关类的…