GDI在PictureBox上画曲线,其上方再放一个可以移动的Label,问题是移动Label时会把绘制好的曲线擦掉。在移动 Label 的过程中重绘所有的曲线方法可能不行,会导致画面闪烁厉害。
重绘上一次Label所在位置的曲线也有难度,曲线是移动的。该如何做才能让移动label时,所画的曲线不被擦除????

解决方案 »

  1.   

    參見
    http://blog.csdn.net/tjvictor/archive/2006/06/19/812792.aspx
      

  2.   

    在移动Label时只重绘被Label挡住的那部分区域
      

  3.   

    to 在移动Label时只重绘被Label挡住的那部分区域
    -----------------------------------------------
    因为曲线是移动的,所以重绘时有点难度,想尽量用别的办法。
    如果实在不行就只好那么办了。
      

  4.   

    to tjvictor(初学者) 
    ----------------------
    现在不想重新画,重新画的画闪烁的太厉害了。
      

  5.   

    那你就别把 Label 放到 PictureBox上 放到别的控件上就没问题了
      

  6.   

    在 label 移动事件中写入:pictureBox1.Invalidate( new Rectangle(label1.Location, label1.Size));
      

  7.   

    那你就别把 Label 放到 PictureBox上 放到别的控件上就没问题了
    ---------------------------------------------
    Label 是基于Form的。现在需要它在pictureBox上指定位置。
    使用双缓冲
    ---------------------
    没试过,想尽量用别的办法,而不重绘。
      

  8.   

    在 label 移动事件中写入:
    pictureBox1.Invalidate( new Rectangle(label1.Location, label1.Size));
    ------------------------------------------------------------------------
    不行,我的Graphics 是通过 pictureBox.CreateGraphics() 得到的,重画也不会重画我以前画出的曲线。现在的解决办法是:
    1   不通过 pictureBox.CreateGraphics() 而是通过 pictureBox 的 Paint 事件中的 e.Graphics。发现在通过这个事件得到的 Graphics ,在这上面画的线好像不会出现被擦除的现象。2   在想要画图的时候,调用一次 pictureBox.Invalidate()。问题是:通过上面这个办法只能在 Paint 事件中画图,因为通过 e.Graphics 得到的 Graphics 离开这个函数后就没法用了。