C#解决MDI窗体闪屏的方法 --(arvin推荐)

C# WinForm控件随窗体大小改变闪屏问题 C# WinFom控件随窗体大小改变闪屏问题 阅读详情

来自:http://im17me.blog.163.com/blog/static/1378992752012927356432/

最近从师兄手上接了一个C#的项目,需要用到MDI窗体,可是每当我显示子窗体的时候会有一次“闪烁”,很明显,看起来非常不爽,查找许久,知道是每次在show()子窗体的时候都会调用子窗体构造函数重绘窗体,其中需要将子窗体的尺寸调整到我在程序中设置的大小,无论我这样设置,这个窗口大小变化总会在show()的时候显示出来,我试过网上说的设置双缓冲、先隐藏窗体等启动之后再显示、借助定时器设置窗体的opacity属性,可是问题依旧,没有任何变化,一个偶然的机会找到了微软的MSDN论坛,发现遇到这个问题的哥们儿还不少,各种国家的程序员都有,其中一个哥们提供了一种一劳永逸的解法,彻底的解决了我的问题,天降救世主啊,为了这个问题我茶饭不思了好多天,现将方法分享一下,网上有很多人都有遇到这个问题,可是这是我唯一看到的解法,值得各位码农收藏啊,原文网址如下,谢谢这位美国小伙子:

http://social.msdn.microsoft.com/forums/en-US/winforms/thread/aaed00ce-4bc9-424e-8c05-c30213171c2c/

解决办法很easy:

将以下代码块加在父窗体中的任意位置

protected override CreateParams CreateParams

{

get

{

CreateParams cp = base.CreateParams;

cp.ExStyle |= 0x02000000;

return cp;

}

}

原理很简单,引用以下原话:

A form that has a lot of controls takes a long time to paint. Especially the Button control in its default style is expensive. Once you get over 50 controls, it starts getting noticeable. The Form class paints its background first and leaves "holes" where the controls need to go. Those holes are usually white, black when you use the Opacity or TransparencyKey property. Then each control gets painted, filling in the holes. The visual effect is ugly and there's no ready solution for it in Windows Forms. Double-buffering can't solve it as it only works for a single control, not a composite set of controls.

I discovered a new Windows style in the SDK header files, available for Windows XP and (presumably) Vista: WS_EX_COMPOSITED. With that style turned on for your form, Windows XP does double-buffering on the form and all its child controls.

Winform子窗体间切换时(激活某个子窗体)闪屏的解决 C#子窗体间切换时闪屏的解决方法,用VS2005打开,并添加了注释。很容易就看懂。。 立即下载

相关推荐

机器人视觉实战:用OpenCV搞定手眼标定(附完整C++代码)

本文详细介绍了使用OpenCV实现机器人视觉中的手眼标定技术,包括核心算法、工业场景优化及完整C++代码示例。通过解析坐标系转换问题,提供从数据采集到标定验证的全流程解决方案,帮助开发者在复杂工业环境中实现高精度机械臂与视觉系统的协同作业。

weixin_29306571的博客 481

C#解决MDI窗体闪屏的方法

最近从师兄手上接了一个C#的项目,需要用到MDI窗体,可是每当我显示子窗体的时候会有一次“闪烁”,很明显,看起来非常不爽,查找许久,知道是每次在show()子窗体的时候都会调用子窗体构造函数重绘窗体,其中需要将子窗体的尺寸调整到我在程序中设置的大小,无论我这样设置,这个窗口大小变化总会在show()的时候显示出来,我试过网上说的设置双缓冲、先隐藏窗体等启动之后再显示、借助定时器设置窗体的opaci...

tansitongba 594

robomimic实验复现全流程:从数据集下载到训练视频生成

本文详细介绍了机器人模仿学习项目RoboMimic的完整实验复现流程。内容涵盖从使用Conda创建Python 3.8隔离环境、安装RoboSuite仿真器和MuJoCo物理引擎,到下载并探索数据集、配置与启动模型训练,最后进行模型评估和生成策略执行视频。该指南旨在帮助研究者和开发者高效搭建实战环境,规避常见问题,快速验证算法或应用于实际场景。

weixin_29089057的博客 518

C#/Winform 防止窗体闪烁

#region 防止窗体闪烁,放在主窗体任意位置 protected override CreateParams CreateParams { get { CreateParams cp = base.CreateParams; cp.ExStyle |= 0x02000000; // Turn on WS_EX_COMPOSITED .

qq_21440541的博客 1284

CANoe数据回放实战:如何用Replay Block精准复现实车故障(附ECU数据处理技巧)

本文深入探讨了利用CANoe的Replay Block功能进行数据回放,以精准复现实车偶发性故障的实战方法。文章重点解析了从原始OBD日志中移除目标ECU数据、转换报文方向等核心数据处理技巧,旨在帮助工程师重构真实的网络测试环境,从而高效定位并解决复杂的ECU问题。

nnn11的博客 496

基于立创·庐山派K230的红色激光点识别和锁定追踪

本文介绍了一种基于立创・庐山派K230开发板的红色激光点识别与追踪系统。该系统通过摄像头采集图像,采用RGB565格式和Gamma校正进行预处理,利用颜色阈值筛选实现红色激光点检测。核心追踪算法采用状态机设计,包含未锁定和已锁定两种状态,通过计算欧氏距离判断目标连续性,并具有丢失计数机制确保稳定性。系统通过UART接口以自定义二进制协议输出坐标数据,同时提供可视化反馈。该方案在800×480分辨率下实现了实时、稳定的单目标追踪,具有检测精度高、响应速度快的特点,适用于工业定位和机器人导航等嵌入式视觉应用场景

m0_73738367的博客 1652

解决C#winForm窗口闪烁问题

这时窗体的Opacity or TransparencyKey 是不会起作用的,窗体的轮廓是可见的,在绘制区域会出现一个丑陋的黑色矩形框。启用双缓冲的首选方法是将该控件的 DoubleBuffered 属性设置为 true,这会产生同样的结果,原因不细说了。主要的原因有:使用了很多的组件导致加载缓慢,使用了性能差的组件(PictureBox、Button等)。如果要求不高,前两种也是可以的。WinForm程序窗体组件太多,第一次打开的时候加载会出现闪屏的问题。有好的建议,请在下方输入你的评论。

camellia的博客 2922

Coze视频混剪智能体工作流,1小时制作100条带货混剪视频,全平台通用

摘要:本文介绍如何利用Coze智能体工作流一键生成全平台带货混剪视频。该工作流支持双视频素材查重处理、智能文案重塑、画面重组等核心功能,通过多节点协同实现批量生产。系统可自动下载视频、提取字幕、生成新脚本,并完成剪辑合成,支持飞书表格批量操作。该工作流已在iThinkAi扣子团队空间开放复制使用,帮助用户高效制作爆款带货视频。

ai979290的博客 1084

窗体最小化后复原最大化时闪烁黑块(C#)

问题: 在做一个窗体,底部有一个Panel,Panel上面有一些button,在最小化后还原最大化的时候,会有处理不掉的一个黑块一闪而过,体验非常不好。使用双缓冲DoubleBuffer后问题一样存在。 解决: 搜索了很多方法,最后使用WinForm的计时器控制窗体的TransparencyKey消除了这个黑块。 1.在窗体最小化的时候设置TransparencyKey为黑...

jemi_A的博客 2990

基于LSTM算法的股票预测详解

一、需求 给定几个已知的股市因素(开盘、收盘、最高、最低、成交量、成交额)及各因素对应的大量数据,训练一个该股票的涨跌趋势的预测模型。并在给定的测试数据的条件下求出接下来的涨跌趋势。即得到下图中的label值。-1代表跌、1代表涨。 二、分析 1、LSTM简单介绍 LSTM这个算法是专门训练有时间序列信息的数据的,即这些数据不仅按照时间递增的顺序排布,并且前后的数据都有着很强的联系。个人认为与马尔可夫的思想差不多,即后面的值由前面的值来决定。本次需求是要根据已知的股市数据来分析某个时间段的涨跌趋势,并预测

Zhang_713的博客 1万+

我的世界进阶模组开发教程——制作机械动力附属模组

摘要: Create是Minecraft的机械动力模组,其代码结构分为多个关键模块: 数据生成系统:通过CreateRecipeProvider基类实现配方自动化生成,支持多步骤序列化装配配方(SequencedAssemblyRecipeGen),采用建造者模式链式调用; 注册管理:CreateRegistrate扩展了Registrate库,统一管理方块、流体、实体等注册,集成标签页分类和工具提示定制; 伤害系统:DamageTypeTagGen为机械伤害(如钻头、风扇火焰)定义原版兼容的标签; 客户端

qq_24992377的博客 2083

Winform"窗体加载闪烁处理、无边框窗体的移动" 之 配餐系统的开发

      本文主要跟大家分享在 ‘配餐系统’开发中 遇到的问题和处理,并且会在以后的时间里,写此项目的经验总结,希望能对你有所帮助!       1.窗体加载闪烁处理 ——这个问题可能大家在做winform应用程序开发中会经常碰到的问题,只是有些窗体闪烁的问题比较明显和严重 ——这时我们可以采取优化方法,比如:压缩窗体中图片的大小(如果窗体中有使用图片)...,但是可能我们尝试着去优化,发现问...

weixin_34061482的博客 239

​非线性分析-增加位移量可能出现下面错误。虽然求解无法在所有时间点完成,但在某些点上仍能够求解部分结果。请参阅“帮助系统”中的故障排除,以了解更多信息详情。由于受约束,规划求解引擎无法收敛

基于收敛状态拆分载荷步‌:在已收敛的载荷步基础上,将未收敛的关键区域拆分为更细的子步,比如在载荷突变点前设置5~10个子步,逐步加载。替换冲突约束为弱约束‌:若存在约束冲突,将刚性约束替换为弱弹簧约束(刚度设为1e-6~1e-4),既限制刚体位移,又不影响结构的变形自由度,命令流:SPRING, NODE, K, 1e-6。部分区域约束完整,但存在未被约束的刚体自由度,或约束类型与大变形/接触逻辑冲突,比如某部件的位移约束在初始阶段有效,但大变形后约束位置脱离实际受力点,导致求解器在该阶段无法收敛。

qq_15963745的博客 145

用一个变态的方法解决winform闪烁问题

很久没有写东西了,希望各位海涵。。一、问题Winform的程序其实在绘制机制上有较大的性能问题,这个问题本身是由于绘制过程是通过system.drawing里面大量使用pvinvke调用api解决的,由于.net的速度问题这个瓶颈很难解决。下面一个图片显示了为什么在一个mdi窗口显示一个模态窗口会闪烁的问题,同理对于mdi子窗口切换也是一样的。1. 在窗口显示出来之前(shown事件),这些控件的句柄已经创建,但.net运行时还来不及处理paint事件。这个效果大致是这样的:而原始Form是这样的:所以一般

千千编程专栏 5918

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

在MDI窗口中防止子窗口闪烁

关键字:MFC, MDI, Flicker用Visual Studio的App Wizard创建MDI项目后,我们会发现在子窗口(CMDIChildWnd)处于最大化状态时常会发生闪烁现象(尤其是内嵌浏览器时),一般说来有如下几种情况:1、当前子窗口处于最大化状态时创建新的窗口,会看到一个矩形闪烁的过程。2、切换窗口时闪烁现象并不明显,但在窗口边缘仍然存在(调用MDINext和MDIPrev不会出

eagleboost's blog 5360

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

【机房合作】在C#中 解决窗体加载时闪烁问题

我们在使用vs设计C#窗体时,通常会因为要加很多功能,放置很多的控件,最后在加载窗体的时候窗体会疯狂闪烁,对用户体验很不好,有一个方法简单改变一个属性就能解决,就是设置窗体属性双缓存。 首先,右键窗体选择属性 在属性中找到DoubleBuffered,并将False改为True 这样在加载窗体的时候就不回出现闪烁的情况了。 ...

zwb的博客 1316

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

C# winform界面闪屏问题解决方法

近期在项目中遇到了登录以及切换界面时,界面不停闪烁的问题,经过查阅发现以下方法可以成功解决该问题。 将下面代码添加到窗体代码中即可: protected override CreateParams CreateParams //防止界面闪烁 { get { CreateParams paras = base.CreatePar...

Mona_Zhao的博客 1265

【C#】MDI父窗体嵌套子窗体 切换时闪屏问题解决办法

只需要在父窗体任意位置添加//避免子窗体闪屏 protected override CreateParams CreateParams { get { CreateParams cp = base.CreateParams; cp.ExStyle |= 0x02000000; return cp; } }

zhaoyu_m69的博客 1187

Arduino IDE跨平台安装失败根因与环境重建指南

Arduino IDE并非普通应用软件,而是嵌入式开发工具链的图形化前端,其稳定运行依赖操作系统内核、USB驱动栈、Java运行时及交叉编译器的协同契约。理解这一底层原理,是解决Windows签名拦截、macOS Apple Silicon JavaFX兼容性、Linux udev权限缺失等高频问题的前提。技术价值在于将‘安装失败’转化为可验证、可回溯、可复现的系统级配置过程;典型应用场景涵盖ESP32/STM32开发、教育实训部署及国产Linux(统信UOS/麒麟)适配。本文聚焦Arduino IDE在三

weixin_34401479的博客 555

C# 解决窗体控件过多闪烁现象

解决窗体控件过多闪烁现象子父窗体方式多个独立的窗体 子父窗体方式 在父窗体加入下面的代码(具体的功能不清,据说是开启的缓冲器然后在刷新显示出来,但确实要好很多) #region 开启界面双缓冲 解决窗体切换闪屏问题 //下面的代码许加在MDI窗体中 protected override CreateParams CreateParams { get { CreatePara

weixin_38777676的博客 1055

c#-解决窗体加载时的闪烁问题

针对启动页面直接添加背景图片,启动软件时会先闪烁一下才能正常显示的问题,可用下面的方案界面 1.开启双缓存 开启窗体的双缓存属性 2.在构造函数里添加以下代码 SetStyle (ControlStyles.AllPaintingInWmPaint //全部在窗口绘制消息中绘图 | ControlStyles.OptimizedDoubleBuffer //使用双缓冲 , true); 如图: 3.添加CreateParams方法,重写 protected override Creat

Yyuanyuxin的博客 2087
上一篇: WinForm程序--常用方法
下一篇: C#用HttpWebRequest通过代理服务器验证后抓取网页内容
ArvinStudy
博客等级 码龄15年 83粉丝 193原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值