第一次用,有些不懂的地方希望大家给予赐教,多谢热心的高手们了. 
1.我用GDI+画图,用方法再load事件里调用不能实现,再构造函数里调用就可以,这是为什么?
2.我用循环画图,经过测试,每次只显示最后一条线,前面的都没有,这是怎么回事?
3.当有窗体遮挡画出线的一部分时,线遮挡的部分就没有了,这个也不知道为什么.做到这里暂时就遇到这些事情,好像都是些硬性的东西,因为第一次用,不知道怎样做,希望大家帮帮忙,谢谢了,分数不多了,见谅!!

解决方案 »

  1.   

    将绘图方法放到OnPaint事件中。
      

  2.   

    onpaint事件怎么写才好?是自己写它么?我真的一点都不懂.还是得麻烦大家了.
      

  3.   

    我尝试了一下把我的画图方法放在onpaint里面调用,但是为什么不停的走onpaint,然后接着走我的方法,然后又是走onpaint,好像死循环一样,这到底是什么原因呢?我快疯了都.
      

  4.   

    onpaint是窗口重绘时触发,你调试时,可能切换了窗口引发窗口重绘,所以感觉不停地调用onpaint,这是正常的。
      

  5.   

    1.Load事件是在窗体显示之前执行的,当窗体显示的时候实际是在绘制窗体,如果你在Load中进行Gdi操作,那么会被窗体显示时候的绘制给覆盖。自然看不到效果
    2.你的循环绘图代码是什么?我估计你是被后一次的绘图给覆盖掉了
    3.其实窗体的移动、最大化、最小化等引起窗体显示变化的时候其实都进行了窗体绘制,只不过是系统自己做的,所以如果你没有在OnPaint也就是窗体重绘中进行原样的绘制,那么以上操作就会因窗体显示的改变而改变你可以参考我的博客:http://stg609.cnblogs.com
      

  6.   

    哦,我试着再onpaint里面写了,现在重新绘制有时好用,有时不好用.这是怎么回事呢?
    还有想问下,关于第2个的循环覆盖的问题,要怎么解决呢???(这个很关键.)
      

  7.   

    有个新的问题,就是我用GDI+循环画的线,由于比较多,就用了滚动条,拉动时候就会变乱,我想知道拉滚动条时候怎么重绘.谢谢.
      

  8.   

    奶奶的,刚打的全不见了~ 定义一个全局的Image bkImg=new Bitmap(pbox1.Width,pbox1.Height);然后在画的时候用:Graphics g=Graphics.FormImage(bkImg);//如果需要清除之前的就: g.Clear(pbox1.BackColor);...//画你想画的g.Dispose();pbox1.Image=bkImg;在程序Dispose()的时候加上
    if(bkImg!=null)
       blImg.Dispose();这样就不会被东西挡了之后就没有图像了,也不会闪烁~ (类双缓冲~),
      

  9.   

    1.我用GDI+画图,用方法再load事件里调用不能实现,再构造函数里调用就可以,这是为什么? 
    2.我用循环画图,经过测试,每次只显示最后一条线,前面的都没有,这是怎么回事? 
    3.当有窗体遮挡画出线的一部分时,线遮挡的部分就没有了,这个也不知道为什么. 1:不是不是执行,是执行以后Shown InitXXxx 把你画的东西盖了建议在Shown里面画
    2:画的时候检查是不是Clear了
    3。在OnPant(object sender,XXXX e)
       用e.Graphic得到上下文就可以画了··和你在其他地方画一样没什么特别的··这个方法的意思当窗体需要重新描绘的时候执行 所以你才会像死循环一样实际上 没有循环哪么多,底层发的消息比较平凡而已
      

  10.   

    我也很久没做GDI方面的了,有些东西记得也不是很清楚了。你可以参考我博客中c# GDI+简单绘图(四)的项目。
    你下载后,打开bin文件夹的绘图程序.exe,然后选择打开一张尺寸比较大的图,这时会有滚动条显示出来,但是基本不影响画图。
    这主要还是由于OnPaint事件进行了重画。
      

  11.   

    感谢上面的帮助,deathsign,和stg609.
    deathsign的分析很对,确实是这样.
    现在我想在一定的情况下重新绘制,想调用虚方法onpaint();怎么写.
    这个结束马上结贴.
      

  12.   

    就是想程序从onpaint()这个方法开始走,接着运行.
      

  13.   

    在窗体最小化时保存pictureBox上所绘的图片到Bitmp,恢复时重绘bitmp,不要把整个循环画图的过程都放到OnPaint里面,那样会线很多的话,系统也需要时间去画的,还不如就画一个bitmp来的快。有滚动条时也一样,先保存一下,等滚动完了,再画一下。
      

  14.   

    protected override void OnPaint(PaintEventArgs e)我现在就想在别的方法里调用它运行,怎么做呢???