VB.net绘图具体如何设置双缓冲

由于绘图刷新造成闪烁,搜索大家都说双缓冲,微软官方也说双缓冲可以解决。但都就说使用下面就行:DoubleBuffered=True可是这句话放在哪才会生效啊,如何使用才会... 由于绘图刷新造成闪烁,搜索大家都说双缓冲,微软官方也说双缓冲可以解决。但都就说使用下面就行:DoubleBuffered = True
可是这句话放在哪才会生效啊 ,如何使用才会生效啊?如果只是放在绘图语句前面,该闪还是闪啊?求一个具体的例子,比如绘制一个正弦波,40ms刷新一次,如何设置能不闪烁???
下面附上:闪烁的代码
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Dim g As Graphics = PictureBox1.CreateGraphics
Dim a As Integer
For a = 0 To 400
pt(a).X = a
pt(a).Y = 150 - 100 * Math.Sin(2 * 3.14159 * a / 200 )
Next
PictureBox1.Refresh()
g.DrawLine(Pens.Blue, 0, 150, 400, 150)
g.DrawLine(Pens.Blue, 200, 0, 200, 300)
g.DrawCurve(Pens.Red, pt)
End Sub
展开
 我来答
创作者zUzVB1Sl31
2016-11-04 · 编程类资料、英语学习资料
创作者zUzVB1Sl31
采纳数:1331 获赞数:5975

向TA提问 私信TA
展开全部
VB.NET画图是不能设置双缓冲的,双缓冲是指窗体,从来没说是针对控件。
不用graphic.clear清理重画就不会闪烁。你可以先把容器删了再重新建立一个再去画。
简单举例:
Graphics g;
Pen p;
Panel pl;
构造函数初始化:
p=new Pen(Color.Red,2);
pl=panel1;
造成闪烁的画法:
g=pl.CreateGraphics();
g.Clear(SystemColor.ButtonFace);
//.....画新的
不会闪烁的办法:
this.Controls.ReMoveAt(panel1);
pl=new Panel();
pl.Name="panel1";
//....创建容器控件
this.Controls.Add(pl);
//继续画
匿名用户
2016-10-20
展开全部

Try this:

Public Sub EnableDoubleBuffering()
   ' Set the value of the double-buffering style bits to true.
   Me.SetStyle(ControlStyles.DoubleBuffer _
     Or ControlStyles.UserPaint _
     Or ControlStyles.AllPaintingInWmPaint, _
     True)
   Me.UpdateStyles()
End Sub
追问
这个函数是在哪里面调用吗?如果在我上面的timer_tick调用,还是无改善。另外我是在picturebox里绘的图,看到了吗?
追答
在你的 picturebox 所在窗体的初始化代码中调用一次即可。
这段代码复制自微软的MSDN。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式