onPain是可以控制所有子控件的pain事件,也就是你可以先取得消息。然后决定做什么:如果你针对某一个,那么一样
看它的格式:
protected override void OnPaint(PaintEventArgs e)//没有object
private void frmSWCacu_Load(object sender, System.EventArgs e)//已经有具体的对像object

解决方案 »

  1.   

    在 Paint 中进行绘图操作,其控制能力要远逊于在 OnPaint 中的绘图操作。如果没有特别的要求,两者没有太多差别。在 OnPaint 中,可以不调用 base.OnPaint(e)(虽然文档建议要调用),来禁止控件对外部赋给的 Paint 事件处理,以及禁止父类的绘图处理。
    这在 Paint 中是无法做到的,在 Paint 中一般总是先由控件自身绘制结束后再调用 Paint 事件处理的。在 OnPaint 中,可以访问在类外部(本例中即 Paint 事件处理)无法访问的内部数据值来决定如何进行绘图操作。
    这是最关键之处。另外,在 OnPaint 中,是在自定义的绘图操作流程之前、之后、之中调用 base.OnPaint(e),还是不调用 base.OnPaint(e),都是有讲究的。
    这基于你对控件父类的绘图处理细节的了解程度,你可以通过对不同的调用方式进行测试,来发现哪一种调用方式适合于你。
      

  2.   

    如果你不打算调用 base.OnPaint(e),但想保留 Paint 事件,建议你用 new 修饰符新建一个 Paint 事件,定义方式与父类一致(只是多一个 new 关键字),然后在 OnPaint 中调用事件处理。protected override OnPaint(PaintEventArgs e)
    {
      // 绘图操作, 以不调用 base.OnPaint(e) 的方式。  ...  if (this.Paint != null)
          Paint(this, e);
    }