我在做一个道路交通模拟的小程序,首先画一个背景,就是许多线段,代表道路
然后在这个背景上,画很多移动的矩形,代表汽车现在所有的功能都实现了,看上去非常完美,
可是,不知道为什么,程序运行一会儿,最早画的背景就一下都消失不见了,
我可以确定的是,并不是移动的矩形把背景覆盖了,而是一下子就消失了,这是怎么回事,应该怎么解决?

解决方案 »

  1.   

    窗口移动、缩放,不再被遮挡......都可能会引起重绘事件,重绘前,Windows将清除窗口上的所有内容,而重绘事件处理方法负责将窗口上应该显示出来的内容都绘制出来,无论何时,Windows从不保存有关窗口上所显示内容的任何信息,这是应用程序负责的范围。
      

  2.   

    你可以将用来做背景的图片生成为一个Image对象,指给Form的BackgroundImage属性。
      

  3.   

    窗体刷新了,。得写在Paint()事件中。最好的策略是先画到一个Image中,让后在Paint()事件中绘制这个Image上次让你下载我写方块看看先
      

  4.   

    按钮之后 -〉1,2
    1. 初始化背景(绘制背景中的道路)
    2. 触发tick, 在tick里面不断生成线程,线程里面画移动的矩形
      

  5.   


    移动的矩形是依靠时间间隔thread.sleep来控制的,那已经不在timer的控制内了
      

  6.   


    还有一个问题,就是:程序结束时点击窗口右上角的红叉按钮,会报错:“GDI+ 中发生一般性错误” 是不是因为一些图形对象没有被销毁导致的,应该怎么解决呢?
      

  7.   

    设置Form的BackgroundImage也不能避免背景被擦除?
      

  8.   


    我的移动的矩形,都是根据背景的位置来定的,它们只能在“道路上”行走如果要给Form设置一个背景,是不是要自己制作一张类似jpg的图片,然后衬到form的背景上?我暂时的解决方法是随着每次timer的tick, 重新绘制背景,但是tick间隔较短,仍然会出现闪动的情况(也就是肉眼能觉察到背景的消失)
      

  9.   


    I've found it. It's "FormClosing()"
      

  10.   

    如果要给Form设置一个背景,是不是要自己制作一张类似jpg的图片,然后衬到form的背景上? 
    ------------------------
    对了,设置这个属性,免得总是需要自己去手动绘制。
      

  11.   

    这个,在Form的Load事件(或Resize事件,如果担心别人会缩放窗口的话)中,计算一下窗口的高和宽,将图片缩放一下,再赋给Form的BackgroundImage。