解决方案 »

  1.   

    this.pictureBox1.Paint += new PaintEventHandler(pictureBox1_Paint); 
    这个是绑定paint事件 就像是给button添加单击事件一样
      

  2.   

    ShowDialog(this)
    在窗口A中:
    FormB b=new FormB();
    B.ShowDialog(this);
    这样在B窗口中可以用
    this.owner就可以找到窗口A,可以用来窗口间传值
      

  3.   

    谢谢楼上的回复,这两个知识点算是知道个大概了
    还有一个主要的问题就是pictureBox_Paint事件一直在运行,除非调试时停止,或者任务管理器停止,帮我再分析分析这个现象的原因
      

  4.   

    应该是绘图的函数内部有重复吧paint函数是空的话,只运行一遍就完了
      

  5.   

    当窗体需要重绘的时候会调用Paint事件。至于窗体无法正常关闭有可能是画曲线另开了线程,关闭时没有正常结束线程。
      

  6.   

    我的程序思路是这个样子的,假如总共有30条变形曲线要画,一个picturebox画3根,画完后图片保存,然后gc.Clear(this.BackColor),清空picturebox,然后一直循环下去。但是循环到30后他又重新循环了,不明觉厉
      

  7.   

    传份Demo到资源上,我下载试试。
      

  8.   

    fd.ShowDialog(this);
    用this的话就表示fd这个窗体是属于当前窗口的,当然窗体最小化时fd也会最小化。。可以这么理解吧~
      

  9.   

    Paint:
       .....
       Invalidate();
    当然会一直调用这个Paint方法了
      

  10.   

     this.pictureBox1.Paint 
    这个事件本身就是picturebox的重绘事件啊,你在上面画图了肯定会一直调用这个函数吧
      

  11.   

    1. 调试时在VS和被调试窗口间切换,因为需要重绘窗体(除非VS界面缩小,不遮盖被调试窗体),使得窗口的Paint事件反复地触发,当然会循环运行。所以Paint事件一般不容易跟踪运行。2. 楼主的Paint事件处理代码承担了太多不该承担的任务,包括绘图、清屏、存盘,占用资源过多。猜测楼主的Paint是要实现类似动画的效果,建议与Timer结合
      

  12.   


    “然后一直循环下去”是什么意思,不是画完30条重头开始循环?
    paint是重绘事件,控件需要重绘的时候都会触发这个事件,比如最小化后再还原,控件被别的窗体遮挡再还原,会不会是反复触发了,所以程序一直运行呢
      

  13.   

    谢谢各位兄弟姐妹们的热情答复
    这是我要批量画图中的一张
    invalidate()方法我曾经也试过,但是调试的时候运行到第30个之后又从1开始重新运行了
    是不是就像xky96所说的通过调试跟踪的话picturebox_Paint()会一直运行下去
    但即使是用了invalidate(),直接运行的程序还是不能正常关闭
    想上传个源码,没找到在哪上传,找到后再上传
      

  14.   

    只会这么上传了
    http://download.csdn.net/detail/porschee/6988067
      

  15.   

    picturebox_Paint() 这个事件是一直运行下去呀。只要你的介面有刷新就会运行。
    像被其他窗体档住,就会刷新。调用Inxxx那更会刷。直到你的介面控件没有变化(不被任何的东西档住)才会停。
      

  16.   

    那有什么别的方法解决吗?
    WIN的消息机制就是这样呀,
      

  17.   

        这么说吧,我用c# gdi+画图,首先你得在一个窗体里设置各种参数,然后再调用另一个窗体画图,曾经我也试过直接在form上画,但好像没法保存为图片,后来就用pictureBox了。
        但这种方法必然会通过paint(我可能坐井观天了),也就必然会像wyd1520兄所说的一直刷新了,那是不是就表示我的程序在用户体验这一块根本就谈不上了,高手指条明路吧!
      

  18.   

    1.加不加this个人觉得问题不大;
    2.这个是给绘制加上事件,其实就是加上一个绘制方法,只不过这个可以自动执行,也就是在Paint的时候就执行了pictureBox1_Paint,所以你一paint,他就执行.
    3.可以考虑用timer控件控制执行速度和停止;
    4.可以dispone释放.
      

  19.   

    gdi+理论上可以在所有可视控件上绘图,也不一定要通过paint。至于说你的程序不停刷新,应该是程序逻辑有问题
      

  20.   

    谢谢各位,这个问题终于解决了,这比长期雾霾天后的晴天还爽啊
    不要用paint事件,直接在Form中画就行了,说起来就这么简单
      

  21.   

    不过不用paint的话,form不能被其它窗体遮住,也不能做最大化,最小化之类的操作,否则图形可能会丢失