以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  窗体闪烁请教  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=52447)

--  作者:hbhb
--  发布时间:2014/6/16 13:22:00
--  窗体闪烁请教
请教大师:
页面控件的不同页面放上图片后,切换不用页面如何减少界面的闪烁?

--  作者:blackzhu
--  发布时间:2014/6/16 13:24:00
--  
停止绘制 
--  作者:hbhb
--  发布时间:2014/6/16 13:50:00
--  
手工按钮切换如何停止绘制?
--  作者:有点甜
--  发布时间:2014/6/16 13:56:00
--  

 试试用双缓存

 

Dim p1 As WinForm.Panel = e.Form.Controls("Panel1")
Dim p2 As WinForm.Panel = e.Form.Controls("Panel2")
p1.baseControl.Gettype().GetProperty("DoubleBuffered",  Reflection.BindingFlags.Instance Or System.Reflection.BindingFlags.NonPublic).SetValue(p1.baseControl,True,Nothing)
p2.baseControl.Gettype().GetProperty("DoubleBuffered",  Reflection.BindingFlags.Instance Or System.Reflection.BindingFlags.NonPublic).SetValue(p2.baseControl,True,Nothing)

 


--  作者:hbhb
--  发布时间:2014/6/16 14:20:00
--  
甜大师:您的意思是在每个页面上增加面板?
以上代码写在哪里?

--  作者:有点甜
--  发布时间:2014/6/16 14:21:00
--  

 意思是你替换成对应的控件。

 

 写在afterload事件。

[此贴子已经被作者于2014-6-16 14:21:24编辑过]

--  作者:hbhb
--  发布时间:2014/6/16 14:40:00
--  
还是没用

图片控件是不是容器?上面放置命令按钮行不行?

主窗体上放置分区面板,再放置图片框,再放放置命令按钮,页面切换时闪动得厉害,请问如何处理?

--  作者:有点甜
--  发布时间:2014/6/16 14:41:00
--  
 做个例子传上来。
--  作者:hbhb
--  发布时间:2014/6/16 14:52:00
--  
请指教
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.zip


--  作者:有点甜
--  发布时间:2014/6/16 15:40:00
--  

没找到好办法,把所有控件都加上双缓存了。有一些代码是不必要的,你根据效果删除对应的控件的双缓存即可。

 

Dim p1 As WinForm.Panel = e.Form.Controls("Panel1")
p1.baseControl.Gettype().GetProperty("DoubleBuffered",  Reflection.BindingFlags.Instance Or System.Reflection.BindingFlags.NonPublic).SetValue(p1.baseControl,True,Nothing)

Dim p2 As WinForm.SplitContainer = e.Form.Controls("SplitContainer1")
Dim p3 As object= p2.Panel1
Dim p4 As object = p2.Panel2
p2.baseControl.Gettype().GetProperty("DoubleBuffered",  Reflection.BindingFlags.Instance Or System.Reflection.BindingFlags.NonPublic).SetValue(p2.baseControl,True,Nothing)
p3.baseControl.Gettype().GetProperty("DoubleBuffered",  Reflection.BindingFlags.Instance Or System.Reflection.BindingFlags.NonPublic).SetValue(p3.baseControl,True,Nothing)
p4.baseControl.Gettype().GetProperty("DoubleBuffered",  Reflection.BindingFlags.Instance Or System.Reflection.BindingFlags.NonPublic).SetValue(p4.baseControl,True,Nothing)

Dim p5 As WinForm.PictureBox = e.Form.Controls("PictureBox1")
p5.baseControl.Gettype().GetProperty("DoubleBuffered",  Reflection.BindingFlags.Instance Or System.Reflection.BindingFlags.NonPublic).SetValue(p5.baseControl,True,Nothing)

Dim p6 As WinForm.TabControl = e.Form.Controls("TabControl1")
p6.baseControl.Gettype().GetProperty("DoubleBuffered",  Reflection.BindingFlags.Instance Or System.Reflection.BindingFlags.NonPublic).SetValue(p6.baseControl,True,Nothing)

Dim p7 As object = p6.basecontrol
p7.tabpages(0).Gettype().GetProperty("DoubleBuffered",  Reflection.BindingFlags.Instance Or System.Reflection.BindingFlags.NonPublic).SetValue(p7.tabpages(0),True,Nothing)