在 VisualBasic.Net 中,当我激活一个图片框并在其上绘制一些东西时,它会绘制然后立即变为空白。当我重新绘制它时效果很好,但我第一次绘制它时几乎总是搞砸了。这发生在几个不同的程序中,帮助文件没有帮助。
6 回答
尝试设置DoubleBuffered
属性
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.doublebuffered.aspx
如果不是这样,请提供更多信息。
通常,如果您在图片框或另一个控件上绘制某些内容,则必须接管 OnPaint 事件,并且您负责持久化在此事件上绘制的内容。
我假设您使用的是标准的 PictureBox 组件。你在 Paint-Handler 中画画吗?如果没有,那么 PictureBox 将在下次被要求重新绘制自身(擦除背景等)时擦除您绘制的内容。
是的,我相信我使用的是标准图片框。
通过 Paint-Handler,我假设您的意思是 [Control].PaintEvent 处理程序。不,我没有使用事件处理程序来绘制...绘制我的图表本身并不是一个事件,而是对按钮单击事件的更大响应的一部分。
如果您说将绘图代码作为单独的特定处理程序的一部分可以解决我的问题,那么我想我每次想重绘图表时都可以引发一个内部事件。但我宁愿只是弄清楚是什么导致 PB 在没有被告知的情况下重绘自己。
如果您不能使用 DoubleBuffered,则可以隐藏第二个图片框。您在其中进行绘图,一旦完成,您就会回到可见的绘图。这样,绘制过程是在隐藏的过程中完成的,不会显示白色/闪烁。
谢谢安德鲁,但没有帮助。我正在使用 .Net Framework 1.1,它不提供 DoubleBuffered 属性……它是 2.0 中的新功能。
不确定要提供哪些附加信息.. 代码长 300 行。单击按钮时,代码会展开我的表单,使两个图片框可见(一个在另一个之上(后面的一个用于一些图形标签),然后使用一些图形画笔和钢笔在前面绘制一个图形框。有一些数据库活动和计算同时在后台进行。