首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VB Dotnet >

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

2012-01-13 
请教高手,如何解决切换窗体时闪烁的问题有两个窗体A和B,两个窗口在同一个位置,两个窗口上都有20多个PICTUR

请教高手,如何解决切换窗体时闪烁的问题
有两个窗体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:改用别的容器来显示图片.
[解决办法]
帮顶

热点排行