图形闪烁,怎么解决???
这是我的代码,window窗体中只有3个button控件和两个timer控件。程序运行时,所画的圆在移动过程中总是会闪烁。怎么办啊???
  public partial class Form1 : Form
     {
         private int l = 100;
         //private int m = 3;
         private int x1 = 30;
         private int x = 0;
         private int y = 30;
         public Form1()
         {
             InitializeComponent();
             SetStyle(ControlStyles.UserPaint, true);
             SetStyle(ControlStyles.AllPaintingInWmPaint, true);//防止窗口跳动
             SetStyle(ControlStyles.DoubleBuffer, true);
         }
         private void paint_circle(int x)
         {
             Graphics g = this.CreateGraphics();
             g.SmoothingMode = SmoothingMode.HighSpeed; ;
             Image i = new Bitmap(this.Size.Width, this.Size.Height);
             Graphics k = Graphics.FromImage(i);
             g.FillEllipse(new SolidBrush(Color.Blue), x, y, l, l);
             g.DrawEllipse(new Pen(Color.Red, 3), x, y, l, l);
             g.DrawImage(i, 0, 0);
             g.Dispose();
         }
         private void button1_Click(object sender, EventArgs e)
         {
             this.Refresh();
             this.paint_circle(x1);
             //this.Invalidate();
         }
         //右移
         private void button3_Click(object sender, EventArgs e)
         {
             x = x1;
             timer2.Stop();
             timer1.Start();
         }
         //左移
         private void button2_Click(object sender, EventArgs e)
         {
             timer1.Stop();
             timer2.Start();
         }
         //右移
         private void timer1_Tick(object sender, EventArgs e)
         {
             this.Invalidate(false);
             timer1.Interval = 10;
             if ( x + l < this.Location.X + this.Size.Width )
             {
                 x++;
                 this.Refresh();
                 this.paint_circle(x);
             }
         }
         //左移
         private void timer2_Tick(object sender, EventArgs e)
         {
             this.Invalidate(false);
             timer1.Interval = 10;
             if ( x > x1 )
             {
                 x--;
                 this.Refresh();
                 this.paint_circle(x);                  
             }
         }
     }
------解决方案--------------------
最近老夫特别喜欢帮别人解决问题,
在你代码上修改了一下,只实现了向右移,你可以举一返三;
直接上代码 ,不解释
C# code
    public partial class Form1 : Form
    {
        private int l = 100;
        private int x1 = 30;
        private int x = 0;
        private int y = 30;
        public Form1()
        {
            InitializeComponent();
            SetStyle(ControlStyles.UserPaint, true);
            SetStyle(ControlStyles.AllPaintingInWmPaint, true);//防止窗口跳动
            SetStyle(ControlStyles.DoubleBuffer, true);
            this.Paint += new System.Windows.Forms.PaintEventHandler(this.Form1_Paint);
        }
        Pen pen = new Pen(Brushes.Red, 3);
        Brush brush = Brushes.Blue;
        private void paint_circle(Graphics g, int x)
        {
            g.FillEllipse(brush, x, y, l, l);
            g.DrawEllipse(pen, x, y, l, l);
        }
        //右移
        private void button3_Click(object sender, EventArgs e)
        {