winform上,在Form上加了一个pictureBox控件,用GDI绘制的内容放在pictureBox控件上,那我用invalidate重绘的时的问题。

.Net技术 码拜 10年前 (2015-05-11) 2241次浏览 0个评论

 winform上,在Form上加了一个pictureBox控件,用GDI绘制的内容放在pictureBox控件上,我是有定时器的一秒刷新一次。那我用invalidate重绘的时应该是this.invalidate,还是picturebox.invalidate?当是this.invalidate的时候我加了双缓存还是有闪屏现象,和不加双缓存的时候效果一样。当我picturebox.invalidate时,pictureBox上面的内容就会消失,偶尔出现一下。正确的应该是重绘Form,还是pictureBox?

10分
画在哪个控件上的,哪个控件就invalidate.至于会消失一下,因为你用的是paint,屏幕更新,你的画面就被抹除了.如果想要不消失,就画在bitmap上,并将此bitmap设置为picturebox的背景.
你双缓存用的不对
双缓存用对了,不会出现你说的这种现象
引用 1 楼 dylike 的回复:

画在哪个控件上的,哪个控件就invalidate.至于会消失一下,因为你用的是paint,屏幕更新,你的画面就被抹除了.如果想要不消失,就画在bitmap上,并将此bitmap设置为picturebox的背景.

你说的bitmap只是白色的背景吗?

我有一个简单的demo你能看看哪里不对吗?1295962107 qq发你
引用 3 楼 jointan 的回复:

双缓存用对了,不会出现你说的这种现象

我有一个简单的demo你能看看哪里不对吗?1295962107 qq发你

10分
在OnPaint里重绘,不要在timer里重绘
引用 1 楼 dylike 的回复:

画在哪个控件上的,哪个控件就invalidate.至于会消失一下,因为你用的是paint,屏幕更新,你的画面就被抹除了.如果想要不消失,就画在bitmap上,并将此bitmap设置为picturebox的背景.

其实我还想问在form上直接画的时候,刷新闪一下屏是因为先把画面清空了再显示,所以有闪屏现象我可以理解,但是在picTureBox上为什么直接就消失了?而不是闪屏的现象,是直接消失没了,不太理解。

因为form本身刷新的时候,也不是每次都整个刷新的
picturebox刷新周期会比form快
10分
你一秒刷一次太浪费了吧,应该根据需要刷新,也就是在picturebox内容(位置什么的)改变时刷新,还一个应该把画图写到OnPaint里,而不是用timer控件去刷
picturebox.CreateGraphics().DrawImage(xxx,xxx);

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明winform上,在Form上加了一个pictureBox控件,用GDI绘制的内容放在pictureBox控件上,那我用invalidate重绘的时的问题。
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!