OnPaint()方法 与 Paint事件有联系吗?在对窗体重画的时候,如何选择呢?选重载OnPaint()方法? 还是选Paint事件?谢谢大家

解决方案 »

  1.   

    OnPaint 方法是用来引发 Paint 事件的。
    可以 重写 Paint 事件吗?一般都重写 OnPaint 方法,但一定要调用 base.OnPaint,不能就不会引发 Paint 事件了。
      

  2.   

    OnPaint 方法是用来引发 Paint 事件的。
    -------------------------------------------还不是太明白好像写任何一个都有相同的效果,如果都写了,则Paint事件的效果没有出来.
      

  3.   

    OnPaint方法是对一个控件来说的;而Paint事件是对一个控件对象来说的。这前者相当于是类的一个成员函数,而后者相当于是类的一个函数指针类型的变量(会因对象的不同而不同)所以,你如果想对所有控件都按照某种固定的方式显示,则需要修改重载控件的OnPaint方法;
    而如果仅仅在某个环境下,要做不同的显示,则只需在其的Paint事件中做即可。
      

  4.   

    OnPaint方法与Paint是两回事,OnPaint是引发Paint的事件,即当需要重绘时,在组件的内部调用OnPaint这个受保护的方法,然后由这个方法引发Paint事件.如果想要重绘窗体,你可以直接继承窗体,然后重写OnPaint,如:
    protected override void OnPaint(PaintEventArgs e)
    {
       // If there is an image and it has a location, 
       // paint it when the Form is repainted.
       base.OnPaint(e);
       if(this.picture != null && this.pictureLocation != Point.Empty)
       {
          e.Graphics.DrawImage(this.picture, this.pictureLocation);
       }
    }
    此处调用base.OnPaint(e),是要调用基类的绘制
    你也可以直接在处理窗体的Paint事件。
      

  5.   

    paint是一个委托的事件。
    onpaint是一个方法:
    onpaint原形应该类似以下形式:
    protectd virturl void onpaint(paintevertargs e)
    {
    if(this.paint != null)
    {
    this.paint(this,e);
    }
    }
    也就是说,重写onpaint后如果不调用base.onpaint是不会出发paint.
    不过你也可以自己加那句(上面)
    protected override void OnPaint(PaintEventArgs e)

      

  6.   

    从执行的情况看,OnPaint()方法什么时候执行呢? 而Paint事件又是什么时候触发呢?
      

  7.   

    OnPaint 是控件自身的方法,自动执行(需要调用base.onpaint,让基类重绘)OnPaint Event 在重绘的时候发生,当自动执行(重绘)的时候触发