首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不使用OnPaint无效

不使用OnPaint无效
EN

Stack Overflow用户
提问于 2015-08-15 14:45:38
回答 1查看 327关注 0票数 2

我正在尝试用Win Forms制作动画,并且我尝试了一种不同于在timer_elapsed处理程序中调用失效(),然后在OnPaintHandler中执行操作的方法。

我只需在pictureBox上直接绘制一个图像,然后当timer_ticks调用失效时,然后在更新的位置手动重新绘制图像。

代码语言:javascript
复制
static void tmrMoving_Elapsed(object sender, EventArgs e, Train t)
{
    MainForm.playBox.Invalidate();

    g.DrawImage(t.components[i], new Rectangle(
                new Point(t.nextVagoonPositionX * 20, t.nextVagoonPositionY * 20), 
                new Size(20, 20)));
    t.nextVagoonPositionX += 1;
    t.nextPositionX = -1;
}

我有一个问题,当计时器滴答作响时,所需的图像有时会被绘制,有时则不会,比如30%的机会不作画(我有1秒的计时器间隔,这样我就可以看到它),即使物体在移动或者只是在同一个位置。

我尝试过的事情:

1.在image () args ->中设置一个区域--图像多次绘制在旧图像的旁边(因此,由于旧图像保留在它们的位置,所以它没有在所需的位置重新绘制)

2.在失效后调用Update()或Refresh()或两者->没有显示任何图像

3.将Update()或Refresh()或两者与无效(矩形区域)组合在一起,->从来没有显示过任何图像

4.设置DoubleBuffering真->无效

5.摆弄this.SetStyle(ControlStyles.UserPaint,真);->无效果(甚至不确定它做了什么)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-15 14:51:24

不应该直接在OnPaint处理程序之外绘制UI控件。在“低级”WinAPI中,您只会在WM_PAINT上的屏幕上绘制,这就是引发OnPaint事件的原因。

将绘图代码(g.DrawImage(...))从计时器处理程序移到OnPaint处理程序中。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32025817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档