`
tansitongba
  • 浏览: 503587 次
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多

最近从师兄手上接了一个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 窗体 闪屏 彻底解决

    "winform 窗体 闪屏 彻底解决"这一主题就是专门针对这个现象,旨在提供一种有效且全面的解决方案。 闪屏问题的产生主要有两个原因: 1. **双缓冲不足**:Windows Forms默认不开启双缓冲机制,即在窗口重绘时,不是...

    C# 多文档程序 子窗体间切换时闪屏的解决

    解决C# MDI应用程序中子窗体切换时的闪屏问题,可以尝试以下几种方法: 1. **使用DoubleBuffered属性**:Windows Forms提供了`DoubleBuffered`属性,它可以减少因多次绘制导致的闪烁。在子窗体的构造函数中,添加...

    Winform子窗体间切换时(激活某个子窗体)闪屏的解决

    C#子窗体间切换时闪屏的解决方法,用VS2005打开,并添加了注释。很容易就看懂。。

    启动闪屏窗体/设置闪屏窗体

    通过`Form`类实例化闪屏窗体,并使用`Show()`方法显示,用`Hide()`或`Close()`方法关闭。同时,可以使用`Thread.Sleep()`来控制显示时长,或使用事件监听来在主界面加载完成后关闭闪屏。 4. 性能优化: 为保证启动...

    winform用tabcontrol切换mdi子窗口及为tabcontrol的page添加关闭按钮

    在Visual Studio中,选择“Windows Forms App (.NET Framework)”项目模板,然后在项目属性中设置`IsMdiContainer`属性为`true`,这使得窗体成为MDI容器,可以承载多个子窗体。 接下来,我们会在MDI容器窗体上添加...

    C#制作闪屏的几个方法

    2. **最小化窗体**:在设计时将窗体的状态设置为最小化,然后在窗体的加载事件中调用`Hide()`方法,这样在闪屏期间主窗体不会显示。 3. **使用Timer**:创建一个`Timer`,在闪屏关闭时启动,一段时间后调用`Show()`...

    解决VC#中ListView闪屏的问题

    为了解决ListView闪屏问题,我们可以采取以下几种方法: 1. **双缓冲技术**:双缓冲是一种优化图形显示的技术,通过在内存中先完成所有绘制,然后一次性绘制到屏幕上,避免了多次绘制导致的闪烁。在C#中,可以...

    C#闪屏SplashScreen

    在C#编程环境中,"闪屏(SplashScreen)"是一个应用程序启动时首先显示的临时窗口,通常用来展示品牌标识、加载进度或者简单的欢迎信息。它为用户提供了视觉反馈,表明程序正在初始化,增加了用户体验的专业感。本文...

    winform c# 闪屏 调用方式简单

    本篇将详细讲解如何利用C#实现带有背景图片的闪屏,并简单介绍调用方法。 首先,创建一个新的WinForm项目,在解决方案资源管理器中添加一个新的窗体,我们将其命名为`SplashScreen`。这个窗体将作为我们的闪屏。...

    C#彻底解决listview的闪屏问题.doc

    总的来说,C#中解决ListView闪烁问题的方法是利用双缓冲技术。通过重写ListView类并设置特定的控制样式,可以在内存中缓存绘图操作,减少对屏幕的直接更新次数,从而消除闪烁,提供更加流畅的用户界面。这是一个优化...

    C#闪屏SplashScreen源代码

    在C#编程中,"闪屏"(SplashScreen)通常是指在应用程序启动时显示...总的来说,C#中的闪屏实现涉及到窗体设计、事件处理和多线程同步等技术。通过学习和实践,开发者可以为自己的应用创建出美观且功能丰富的闪屏效果。

    C#闪屏 (代码)

    以上就是C#中实现窗体渐进效果的闪屏功能的基本步骤。在实际开发中,你可能还需要考虑其他因素,如动画的流畅性、加载进度的显示、错误处理等。通过调整计时器的间隔、透明度和大小变化的步长,你可以自定义出符合...

    C# winform闪屏示例

    在本文中,我们将深入探讨如何在C# WinForm应用程序中实现“闪屏”(Splash Screen)功能,特别是在登录窗口和数据加载过渡场景中的应用。闪屏通常被用来提供一个短暂的用户界面,显示应用程序的徽标、进度条或加载...

    解决Listview添加 闪屏

    标题提到的“解决Listview添加 闪屏”,实际上是指优化ListView的滚动性能,避免在添加或更新数据时出现不流畅的现象。 为了解决这个问题,我们可以采用一种叫做“双缓冲”(Double Buffering)的技术。在计算机...

    电脑显示器闪屏怎么回事 电脑显示器闪屏解决方法【详细介绍】.docx

    电脑显示器闪屏解决方法详细介绍 电脑显示器闪屏是怎么回事?作为一个常常接触电脑的人来说,显示器则必需是他要长久面向的,每个人都会有这种感觉,当长时光看一件物体时,眼睛就会感觉特疲劳,显示器也一样,因为...

    C#闪屏代码

    在C#编程中,"闪屏"通常是指应用程序启动时短暂显示的一个窗口,它通常包含应用程序的logo或一些启动信息,以提升用户体验并提供品牌认知。这个“C#闪屏代码”应该是一个实现闪屏功能的示例项目,包含以下几个关键...

    C#Winforms背景图闪烁解决方案

    C#Winforms背景图闪烁解决方案,即将本段代码直接添加进窗体类。但是有一个弊端,但针对面板背景图闪烁也可以在窗体中寻找双缓存属性将其改成TRUE也能解决此问题!!!

    双缓冲解决切换图片闪屏的实例

    本实例是关于如何利用双缓冲来解决在切换图片时可能出现的“闪屏”问题。闪屏通常发生在低效的图形绘制过程中,当屏幕刷新率与图像绘制速度不匹配时,用户可能会看到不完整的图像或者闪烁的效果,这在用户体验上是...

    满汉楼闪屏效果及登录模块

    例如,在Android中,可以使用`Activity`的生命周期方法配合`ImageView`或者自定义`View`来创建;在iOS中,可以利用`LaunchScreen.storyboard`或代码动态创建。开发者需要考虑如何让闪屏效果与应用整体风格保持一致,...

    电脑显示器闪屏怎么办 显示器闪屏原因【解决方法】.docx

    电脑显示器闪屏的解决方法 电脑显示器闪屏是指显示器屏幕上出现闪烁、颤动、花屏等不正常现象,影响用户使用体验。显示器闪屏可能是由于多种原因引起的,包括接触不良、信号干扰、屏幕刷新率太低、劣质电源、电脑...

Global site tag (gtag.js) - Google Analytics