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打开,并添加了注释。很容易就看懂。。 立即下载

相关推荐

【Java】利用反射执行Spring容器Bean指定的方法,支持多种参数自动调用

目录 使用情景 目的 实现方式 前提: 思路 核心类 测试方法 使用情景 将定时任务录入数据库(这样做的好处是定时任务可视化,也可以动态修改各个任务的执行时间),通过反射执行对应的方法; 配合Netty实现简单的HTTP请求处理框架 其他需要使用反射执行Spring方法的业务亦可 目的 很多文章都提到了反射,但是对于方法参数处理这一块都是明确了类型,不支持按照实际参数动态转换,而本篇文章提供了一个思路怎么做到方法参数的动态调用。 大家也可以...

ITjianshuzhai的博客 2334

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

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

tansitongba 594

LFM调制信号分类与检测识别

支持识别LFM信号、间歇采样干扰(ISRJ)、灵巧噪声干扰(SNJ)、扫频干扰(SJ)、瞄准干扰(AJ)、阻塞干扰(BJ)、密集假目标干扰(DFJ)、密集假目标加灵巧噪声干扰(DFWSNJ)、距离欺骗干扰(DDJ)、距离欺骗加灵巧噪声干扰(DDWSNJ)。Faster-RCNN支持检测识别LFM信号、间歇采样干扰(ISRJ)、灵巧噪声干扰(SNJ)、扫频干扰(SJ)、瞄准干扰(AJ)、密集假目标干扰(DFJ)、密集假目标加灵巧噪声干扰(DFWSNJ)、距离欺骗加灵巧噪声干扰(DDWSNJ)等8种信号。

菜yuan~的博客 1029

C#/Winform 防止窗体闪烁

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

qq_21440541的博客 1284

C#.NET斗地主服务端核心架构与高性能实现

斗地主作为典型的实时对战棋牌逻辑,本质是状态驱动的分布式协同问题。其技术内核涵盖有限状态机建模、低延迟网络同步、无GC内存操作与轻量级AI决策等关键能力。在.NET平台下,借助Span<T>、ImmutableArray、命令/事件总线与内存池等特性,可构建出高吞吐(200+ QPS)、低延迟(<150ms)、强一致的可落地服务端。本文聚焦C#.NET生态中斗地主核心模块的设计取舍与压测验证,深入解析状态机驱动、CardSet结构体优化、Kestrel中间件锁、规则+概率混合AI等实战方案,为实时对战类业务

weixin_29726381的博客 345

永磁同步电机无传感器控制:HFI与ESMO技术详解

高频注入(HFI)和增强型滑模观测器(ESMO)是现代永磁同步电机(PMSM)无传感器控制的核心技术。HFI通过注入高频信号利用电机凸极效应获取转子位置,而ESMO则通过改进传统滑模观测器,有效抑制抖振并提升动态响应。这两种技术的结合特别适用于零低速区域的位置估计,在工业伺服、电动汽车等领域有广泛应用。方波高频注入作为实现方案之一,具有计算量小、实现简单的特点,配合自适应滤波等信号处理技术,可以在保证精度的同时降低系统成本。

weixin_29183637的博客 356

解决C#winForm窗口闪烁问题

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

camellia的博客 2922

OneNet平台MQTT连接避坑指南:C语言Token计算实战(附完整代码)

本文详细解析了OneNet平台MQTT连接中的Token计算机制,提供了C语言实现的完整代码和实战指南。通过HMAC算法和Base64编码,开发者可以高效生成安全凭证,避免常见连接问题,适用于物联网设备开发。

weixin_29193359的博客 462

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

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

jemi_A的博客 2990

华为OD机试真题 新系统2026-04-15 Java&Go 实现【小猫钓鱼纸牌游戏】

有两名玩家甲和乙,他们玩一种“小猫钓鱼”扑克牌游戏。扑克牌为A、2、3、....J、Q、K,不考虑花色都用1-13来表示,然后给甲,乙两人各发n张牌,按给定顺序排成队列,这些牌背面朝上,正面朝下放置,队列的第一个元素是背面的第一张牌。 游戏规则如下:

MISAYAONE的博客 354

使用再生龙备份还原liunx系统(精确每一步)

再生龙镜像可自行到官网下载(ISO/ZIP格式均可),然后使用tuxboot烧录工具制作启动盘,另外准备一个U盘用来存储备份的镜像文件,即再生龙盘和存储盘是两个分开的。当然也可以用分区工具把同一个硬盘分区来使用,比较方便,先学会基本的吧,只是告诉有个捷径,省个U盘。

米可的博客! 8374

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

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

weixin_34061482的博客 239

一文搞懂自适应激光控制技术,开启光学新时代

自适应激光控制技术作为现代光学领域的关键技术,以其独特的原理和高效的工作机制,在科研、工业等众多领域展现出了巨大的应用价值。通过对激光波前的实时测量与补偿,它成功克服了激光在传输和应用过程中面临的诸多挑战,显著提升了激光的光束质量和应用效果。在科研领域,它助力天文观测突破大气湍流的限制,让我们得以更清晰地窥探宇宙的奥秘;在激光核聚变研究中,为实现高效的核聚变反应提供了关键支持,为解决能源问题带来了新的希望。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 2529

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

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

千千编程专栏 5918

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

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

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

eagleboost's blog 5360

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

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

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

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

zwb的博客 1316

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

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、付费专栏及课程。

余额充值