在button2 事件中,怎么不能用invalidate()啊,用了,在画别的就画不出来了;
请同志们帮帮忙啊,
private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
Graphics g=e.Graphics;  
g.FillRectangle(Brushes.GreenYellow,60,60,100,100);   

}private void button1_Click(object sender, System.EventArgs e)
{
Graphics g1;
g1=this.CreateGraphics();
g1.FillRectangle(Brushes.Brown,70,70,20,20);  
 }private void button2_Click(object sender, System.EventArgs e)
{
           
this.Invalidate();//////???????加上为什么旧不显示下边的内容了啊
Graphics g;
g=this.CreateGraphics();
g.FillRectangle(Brushes.Blue,100,100,20,20);


}

解决方案 »

  1.   

    我是喜欢这么写
    Rectangle rect = new Rectangle(1,1,100,100);
    Color color = Color.Red;
    private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
    {
       if(rect != null)
       {
          e.Graphics.FillRectange(new SolidBrush(color),rect);
       }

    }private void button1_Click(object sender, System.EventArgs e)
    {
             color = Color.Brown;
             rect = new Rectangle(70,70,20,20);
             this.Invalidate();
     }private void button2_Click(object sender, System.EventArgs e)
    {
               
             color = Color.Blue;
             rect = new Rectangle(70,70,20,20);
             this.Invalidate();

    }
      

  2.   

    Invalidate();执行完后 会重新执行paint 事件,重新刷新页面
      

  3.   

    是不是  button2 中的
     Graphics g;
    g=this.CreateGraphics();
    g.FillRectangle(Brushes.Blue,100,100,20,20);
    这三行代码要执行在  paint 事件之前啊,如果是的 话,怎样让它在paint 事件之后运行啊?????????????????
      

  4.   

    Invalidate并不是重绘,而是发了消息通知窗体需要重绘,等你当前函数执行完毕,才会去响应这个重绘的请求的。比较好的方法是手工调用OnPaint,自己构造一个PaintEventArg对象。最后记得Dispose
      

  5.   

    private void button2_Click(object sender, System.EventArgs e)
    {
               
    this.Invalidate();//////???????加上为什么旧不显示下边的内容了啊
    Graphics g;
    g=this.CreateGraphics();
    g.FillRectangle(Brushes.Blue,100,100,20,20);
    }
    应该把this.Invalidate();放在函数末尾吧.