还望高手指点指点!!!先谢过了,我的环境是vs.net 2003
1 新建项目,拖了个picturebox控件(fill);然后拖了个timer控件进去,设定每秒触发一个绘图函数
2 加入一个新的窗体 然后把继承的System.Windows.Forms.Form改为Form1
3 编译后出现了奇怪的问题。程序和Form2的设计器同时开始了绘图,更奇怪的是关掉程序后,Form2的设计器还在不停的绘图。
各位可以花三四分钟在自己的环境下试下,讲讲原因来着,不甚感激。看到如此神奇的场景,我算是彻底见世面了。Form1的部分代码:private int count = 0 ;

protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
{
    Graphics g = pictureBox1.CreateGraphics();
    Pen pen = new Pen(Color.Red,5);
    if ( count == 10 )
    {
count = 0;
g.Clear(BackColor);
    }
    else
    {
         for (int i=0;i<count;i++) 
{
  g.DrawLine(pen, 20*i,20*i,50*i,20*i);
}
    }
}private void timer1_Tick(object sender, System.EventArgs e)
{
    count ++;
    this.Invalidate();
}

解决方案 »

  1.   

    this.DesignMode
    可以区分是在设计还是运行模式,加上判断就可以了.
      

  2.   

    private int count = 0 ;

    protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
    {
        Graphics g = pictureBox1.CreateGraphics();
        Pen pen = new Pen(Color.Red,5);
        if ( count == 10 )
        {
    count = 0;
    g.Clear(BackColor);
        }
        else
        {
             for (int i=0;i<count;i++) 
    {
      g.DrawLine(pen, 20*i,20*i,50*i,20*i);
    }
        }
    }private void timer1_Tick(object sender, System.EventArgs e)
    {
        if(!this.DesignMode)
        {
            count ++;
            this.Invalidate();
        }
    }
      

  3.   

    你的控制在设计时Timer是不运行的,可是放到一个窗体上这个控件就相当于运行时了.你可以通过DesignMode来判断是不是设计时,但是这个DesignMode在继承后可能就不准了.
      

  4.   

    没试,不过这种现象不奇怪
    既然Form2继承Form1,就会继承它的OnPaint行为,设计器里面会显示一个模拟的效果来给你看
    第一次编译之前不会有,是因为设计器还不知道这个效果是什么样的这件事情要理解应该比较简单,如果你现在添加一个button到form1,刚开始的时候,设计器上的form2是没反应的。如果你编译过,那么form2的设计器就会显示出这个button给你看
    你所提到的现象,跟加一个button从继承的意义上来说,是一样的,只不过因为你重载了OnPaint,加计时器,做出了动态的效果
      

  5.   

    谢谢各位相助! 搞清楚咋回事了!
    winer2006(我心飞扬)的代码演示,以及aquariusdeng(无泪有伤之新手上路)的讲解,我都很感激!
    csdn果然是强!
    结帖给分
      

  6.   

    谢谢各位相助! 搞清楚咋回事了!
    winer2006(我心飞扬)的代码演示,以及aquariusdeng(无泪有伤之新手上路)的讲解,我都很感激!
    csdn果然是强!
    结帖给分