事实上,拖动滚动条的时候form也在重画
偶觉得你最好把画图的东西写在一个函数里,重画的时候调用

解决方案 »

  1.   

    在你的InitialMap中必须重画你每条直线!你可以将直线作为一个对象保存起来
      

  2.   

    private void pnlFlow_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
    {
      RePaintPanel();
    }
    private void RePaintPanel()
    {
      DrawingImage.Dispose();
      DrawingImage = new Bitmap(this.pnlFlow.ClientRectangle.Width,this.pnlFlow.ClientRectangle.Height);  Graphics g = Graphics.FromImage (DrawingImage);
      g.SmoothingMode = SmoothingMode.AntiAlias;
      Brush BrushTemp = new SolidBrush(this.pnlFlow.BackColor);
      Pen p = new Pen(Color.Black, 1);
      g.FillRectangle(BrushTemp, this.pnlFlow.ClientRectangle);  for(RegionNode n = RegionHead; n !=null; n = n.next)
      { g.DrawLine(p,n.startPoint,n.endPoint);
    this.DrawArrow(g,p,n.startPoint,n.endPoint);
      }
      // Disposing
      p.Dispose();
      BrushTemp.Dispose();
      g.Dispose();  //DrawImgOnPanel(DrawingImage);
    }
      

  3.   

    他们的意思是说,要你把画图写成一个函数,每次拖动滚动条的时候(即滚动条发生改变的事件)都调用该函数对form进行重化。
      

  4.   

    在第一次画完之后,将其保存为后台bitmap,
    然后在paint事件中把bitmap调出来就可以了
      

  5.   

    click事件中画直线后,应该在以后的paint事件中画同样的一条这样滚动就不会有问题的也就是说所有绘图都放在paint里面的话,不管是滚动还是改变大小都不会不见的啊.
      

  6.   

    拖动滚动条的时候系统会自动调用OnPaint进行重绘,就把你先前画的线覆盖掉了
    你可以定义一个关于线的类或者结构,把所画的每条线作为一个对象保存起来,
    然后在OnPaint函数里添加重绘所有线条对象的操作,就可以避免被擦除了。
      

  7.   

    首先.使用滚动条滚动的时候,并不是所有的都需要重新能绘制,有部分Window自己搞定了,你只要绘制需要绘制的部分就可以了,大家可以反编译DataGrid组件的源码看看就可以了。
    在system.windows.forms.dll中,反编译器net reflactor