不知道 这个能帮你不  private bool m_MouseLine = false;
        private Point _Point = Point.Empty;
        private void panel2_MouseDown(object sender, MouseEventArgs e)
        {
            _Point.X = e.X;
            _Point.Y = e.Y;
            m_MouseLine = true;
        }        private void panel2_MouseMove(object sender, MouseEventArgs e)
        {
            panel2.Refresh();
            if (m_MouseLine)
            {
                Graphics _Graphics = Graphics.FromHwnd(panel2.Handle);
                _Graphics.DrawLine(new Pen(Brushes.Black, 1), _Point, new Point(e.X, e.Y));
                
                _Graphics.Dispose();
            }            
        }        private void panel2_MouseUp(object sender, MouseEventArgs e)
        {
            //处理图形            panel2.Refresh();
        }

解决方案 »

  1.   

    试验了,还是闪,如果要是panel控件能透明就好了,也许可以解决.
      

  2.   

    blog.csdn.net/dunao
    看看这个吧不闪
      

  3.   

    以前回答过,再贴一遍双缓冲(和DirectDraw一个原理) 
    namespace WindowsFormsApplication10
    {
        public partial class Form1 : Form
        {
            Bitmap OrgBmp = null;
            Bitmap CacheBmp = null;
            public Form1()
            {
                InitializeComponent();            pictureBox1.Image = new Bitmap(400, 400);
                pictureBox1.Size = new Size(400, 400);
                Graphics g = Graphics.FromImage(pictureBox1.Image);
                g.FillEllipse(new SolidBrush(Color.Red), new Rectangle(0, 0, 400, 400));
                g.Dispose();
                OrgBmp = new Bitmap(pictureBox1.Image);
            }        private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
            {
                CacheBmp = new Bitmap(OrgBmp);
                Graphics g = Graphics.FromImage(CacheBmp);
                g.FillRectangle(new SolidBrush(Color.Black), new Rectangle(e.Location, new Size(30, 30)));
                g.Dispose();
                pictureBox1.Image = CacheBmp; 
            }
        }
    }