想要实现的功能是先画一条箭头线,然后使用其他颜色抹掉
画线时使用了平滑选项(这是关键点,如果不使用此选,可以盖住)
画线的简单参考代码如下:    Graphics g = this.CreateGraphics();
    Pen pen = new Pen(Color.Black);
    g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
    g.DrawLine(pen, new Point(10, 10), new Point(200, 100));
    g.Dispose();

解决方案 »

  1.   

    还是那句话,不用抹掉,而是把要抹掉的线下一次刷新的不再绘制。
    直接使用Invalidate的重载的一个函数,让控件重新绘制。
      

  2.   

    楼主是否可以参考一下这个文章并运行里面的代码试试看:
    http://blog.csdn.net/hbxtlhx/archive/2007/08/31/1766913.aspx
      

  3.   

    界面上线太多了,可能会有几百上千条交叉,重画一次消耗不起。
    那么多的线,闪很正常了,你看autocad不也会闪。
    我说个思路,你重绘那个区域的图形。就是判断要重画的矩形,看有多少条线在这个矩形里,在这个矩形里的就重绘。我没做过这种,仅供参考。
      

  4.   

    在mfc里做过,画完一条就把他存到一个地方(链表)
    橡皮线本身就是用异或线画出来的
    每次重绘橡皮线所在的最小外包矩形就好了
      

  5.   

    要用异或线来画(可以考虑用API绘制,不过要注意内存泄露),全部重画代价太高,如果画具备橡皮筋性质的矩形框就好办了,可以用如下API绘制,
      [DllImport("user32", EntryPoint = "DrawFocusRect")]
            public static extern int DrawFocusRect(IntPtr hdc, ref  RECT rect);
      

  6.   

    这个应该对你有帮助,可惜我用vb写的,参考一下吧。
    http://blog.csdn.net/wzuomin/archive/2006/12/13/1441007.aspx
      

  7.   

    楼主VML画图会让你有眼前一亮的感觉,速度效率极佳,缺点是只支持IE
      

  8.   

    永久图也可以绘制啊
    使用类似下面的Graphics绘制
    Function GetGraphics(ByVal pic As PictureBox) As Graphics
            Dim bmp As Bitmap = New Bitmap(pic.Width, pic.Height)
            pic.Image = bmp        Dim g As System.Drawing.Graphics = Graphics.FromImage(bmp)
            Return g
        End Function