专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > VB Dotnet

,怎么解决切换窗体时闪烁的有关问题

发布时间:2011-06-23 16:01:13 文章来源:www.iduyao.cn 采编人员:星星草
请教高手,如何解决切换窗体时闪烁的问题
有两个窗体A和B,两个窗口在同一个位置,两个窗口上都有20多个PICTUREBOX控件,我将DoubleBuffer,ControlStyles.AllPaintingInWmPaint都设为了TRUE,可在切换窗口的时候还是会出现闪烁。感觉很明显,在A切换到B的时候甚至可以看到一半B的控件有一小半A的控件。我目前的做法是切换的时候将两个窗口的TOPMOST轮流设为TURE.再去SHOW窗口,还并没有将另外一个窗口HIDE.因为我试了HIDE的话闪烁得更加历害。。。。请教高手帮忙。。。。

------解决方案--------------------
双倍缓冲:
Private Sub 双倍缓冲()
SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.OptimizedDoubleBuffer Or ControlStyles.UserPaint, True)
UpdateStyles()
System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = False
End Sub
在LOAD 事件中调用:双倍缓冲()
------解决方案--------------------
使用API函数试试!
LockWindowUpdate 

VB声明 
Declare Function LockWindowUpdate Lib "user32" Alias "LockWindowUpdate" (ByVal hwndLock As Long) As Long 
说明 
锁定指定窗口,禁止它更新。同时只能有一个窗口处于锁定状态 
返回值 
Long,非零表示成功,零表示失败(比如另外已有一个窗口锁定) 
参数表 
参数 类型及说明 
hwndLock Long,欲锁定窗口的句柄。如设为零,则对窗口解锁 
注解 
windows会跟踪锁定窗口的区域,并会在窗口解锁后重画它们。可用GetDCEx获得一个特殊的设备场景,令其与锁定窗口协同工作,从而描绘一个加锁的窗口。这种技术的一个应用场合是创建跟踪矩形(比如用于改变窗口大小的矩形)
 
Declare Function LockWindowUpdate Lib "user32" Alias "LockWindowUpdate" (ByVal hwndLock As Int32) As Int32
Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.Click
LockWindowUpdate(Me.Handle.ToInt32)
End Sub
Private Sub Button9_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button9.Click
LockWindowUpdate(0)
End Sub
装载完成后解除窗体锁定,重新绘制窗体!
------解决方案--------------------
可以考虑把多张图合并为一张。
------解决方案--------------------

不一定要把所有图片合并到一起,可以分组合并,把其中的某几张合并为一张
------解决方案--------------------
估计很难,lz再多试试。。
------解决方案--------------------
PICTUREBOX多就耗费的资源多,于是就感觉到慢(闪).
建议:
1:少用些PICTUREBOX
2:改用别的容器来显示图片.
------解决方案--------------------
帮顶
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: