public Form1()
    {
        InitializeComponent();
    }
Point point1 = new Point(20, 20);
private void Form1_Load(object sender, EventArgs e)
    {
           
    }       
private void Form1_Paint(object sender, PaintEventArgs e)
    {
         Graphics g = this.CreateGraphics();
         Rectangle rectangle = new Rectangle(point1, new Size(30, 30));
         Pen pen1 = new Pen(Color.Red);
         g.DrawEllipse(pen1, rectangle);
     }
private void button1_Click(object sender, EventArgs e)
     {
         point1 = new Point(20, 40);  
         Invalidate();      //调用Invalidate方法,实现重绘
     }
上面是一个简单的调用Invalidate方法实现重绘的代码,我想问:
上面例子是form1_paint事件,如果想实现panel1_Paint事件,该怎么做呢?如果Form1中有多个paint事件,Invalidate是调用的哪个paint事件呢?

解决方案 »

  1.   

    如果Form1中有多个paint事件,Invalidate是调用的哪个paint事件呢?打开 form.design.cs 文件里面有类似this.Paint += new EventHandler(Form1_Paint);这样的代码。调用的就是这个里面指定的方法。至于如何编写Panel的Paint,原理是一样的。
      

  2.   

    我是说,比如:
    public Form1()
      {
       InitializeComponent();
      }
    private void panel1_Paint(object sender, PaintEventArgs e)
            {
            }
    private void button9_Click(object sender, EventArgs e)
            {
              ......
             
             Invalidate();//这里怎么不能调用panel1_Paint事件呢?
            }
    如何调用panel1_Paint事件
      

  3.   

    这里调用的是this.Invalidate();
    也就是form的Invalidate
      

  4.   

    这里调用的是当前窗体的Invalidate。就是this.Invalidate
    想调用panel的试试panel1.Invalidate()
      

  5.   

    谁的Paint,就谁的Invalidate,panel1.Invalidate