none
C# pictureBox控件中绘制动态图形时闪烁怎么解决? RRS feed

  • 问题

  • 我想画的是一条一段固定一端旋转的线段。
    下面是绘图代码。我已经用了双缓存了啊!可还是闪烁。怎么解决啊?

    void Timers_Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
            {                                     
                    double x = 200 + 100* Math.Sin(num * Math.PI / 180);
                    double y = 120 - 100 * Math.Cos(num * Math.PI / 180);
                    label1.Text = Convert.ToString((num = num + 0.1)); //显示到lable              
                    Graphics p = pictureBox1.CreateGraphics();
                    Bitmap bmp = new Bitmap(600, 600);
                    Graphics g = Graphics.FromImage(bmp);

                   g.DrawLine(new Pen(Color.Black), (float)200, (float)120, (float)x, (float)y);
                   p.DrawLine(new Pen(Color.Black), (float)200, (float) 120, (float)x, (float)y);
                   pictureBox1.CreateGraphics().DrawImage(bmp, 0, 0);

                    pictureBox1.Invalidate();
            }
    2013年10月28日 10:36

答案

  • 你好:

    欢迎来到MSDN中文论坛。

    建议你在PictureBox的Paint事件里面获取Graphics对象,然后再绘制你的图形。

    另外不建议使用PictureBox来画图,PictureBox的主要目的是用来显示图形的。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2013年10月29日 7:20
    版主
  • 您好,
    如果將畫圖的code搬到pictureBox1的Paint事件之中呢?

    private void pictureBox1_Paint(object sender, PaintEventArgs e)
    {
    	double x = 200 + 100 * Math.Sin(num * Math.PI / 180);
    	double y = 120 - 100 * Math.Cos(num * Math.PI / 180);
    	Graphics g = e.Graphics; // Graphics.FromImage(bmp);
    	g.DrawLine(new Pen(Color.Black), (float)200, (float)120, (float)x, (float)y);
    	g.DrawLine(new Pen(Color.Black), (float)200, (float)120, (float)x, (float)y);
    }
    
    void Timers_Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    {                                     
    	pictureBox1.Invalidate();
    }


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2013年10月29日 8:18

全部回复

  • 你好:

    欢迎来到MSDN中文论坛。

    建议你在PictureBox的Paint事件里面获取Graphics对象,然后再绘制你的图形。

    另外不建议使用PictureBox来画图,PictureBox的主要目的是用来显示图形的。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2013年10月29日 7:20
    版主
  • 您好,
    如果將畫圖的code搬到pictureBox1的Paint事件之中呢?

    private void pictureBox1_Paint(object sender, PaintEventArgs e)
    {
    	double x = 200 + 100 * Math.Sin(num * Math.PI / 180);
    	double y = 120 - 100 * Math.Cos(num * Math.PI / 180);
    	Graphics g = e.Graphics; // Graphics.FromImage(bmp);
    	g.DrawLine(new Pen(Color.Black), (float)200, (float)120, (float)x, (float)y);
    	g.DrawLine(new Pen(Color.Black), (float)200, (float)120, (float)x, (float)y);
    }
    
    void Timers_Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    {                                     
    	pictureBox1.Invalidate();
    }


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2013年10月29日 8:18