代码如下,当我拖动鼠标的时候,picturebox的图形会出现,会随着鼠标拖动变化,但是当我停止拖动,并且没有松鼠标的时候,图形的线就消失了,如果我松了鼠标,或者拖动鼠标,图形的线会出现。就是说我鼠标按下不动的时候图形就消失,可能是mouseMove方法里的事,不知道怎么回事,求指导。
 bool isDrawEllipseDown = false;  private void pictureBox_mouseDown(object sender, MouseEventArgs e) 
        {
              isDrawEllipseDown = true;
                StarPoint.X = e.X;
                StarPoint.Y = e.Y;
          }   private void pictureBox_mouseMove(object sender, MouseEventArgs e) 
        {
              Pen p = new Pen(Color.Black, 5);
                    Graphics g1 = this.pictureBox1.CreateGraphics();
                    g1.DrawEllipse(p, StarPoint.X, StarPoint.Y, e.X - StarPoint.X, e.Y - StarPoint.Y);
                    pictureBox1.Refresh();     
         }
 private void pictureBox_mouseUp(object sender, MouseEventArgs e) 
        {
           isDrawEllipseDown = false;
                Pen p = new Pen(Color.Black, 5);
                Graphics g = Graphics.FromImage(pictureBox1.Image);
                g.DrawEllipse(p, StarPoint.X, StarPoint.Y, e.X - StarPoint.X, e.Y - StarPoint.Y);
                pictureBox1.Refresh();
                p.Dispose();
                g.Dispose();
          }                   

解决方案 »

  1.   

    把画图的代码写到pictureBox的onpaint事件中,然后在move时,pictureBox.invalidate()
      

  2.   

    你拖到的时候pictureBox重绘了。
      

  3.   


            int p_x, p_y;
            Color c = new Color(); 
            private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
            {
                p_x = e.X;
                p_y = e.Y;
            }        private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
            {
                Graphics g = pictureBox1.CreateGraphics();
                if (e.Button == MouseButtons.Left)
                {
                    g.DrawLine(new Pen(c, Convert.ToInt32(comboBox1.SelectedItem)), new Point(p_x, p_y), new Point(e.X, e.Y));
                    //g.FillPie(new SolidBrush(Color.Red), p_x, p_y, Convert.ToInt32(comboBox1.SelectedItem), Convert.ToInt32(comboBox1.SelectedItem), 0, 360);
                    //g.DrawLine(new Pen(
                    p_x = e.X;
                    p_y = e.Y;            }
            }