画线是很简单的,但是线不是控件,不会自动重复画自己,要在Paint里面画
如果要改变线的位置,可以通过Refresh强制重绘,这样会清除之前的全部图形,但是缺点是可能会闪(比如拖动控件时重绘连接线)
为了不闪,要用背景色重复画一次,就相当于擦除,但是就是要记录之前的图形,以便能够擦除
下面这段代码实现了擦除
container是画图的容器,可以是任何控件
points是图形,本例是一个带箭头的折线
bClear控制是绘图还是擦除
坑:Graphics.DrawLines的参数points数组的每个元素都必须是有效的,不能有多余的空元素
private static void DrawLines(Control container, Point[] points,bool bClear) { Pen pen = new Pen(Color.Red, 3); if (bClear) { pen.Color = container.BackColor; } pen.EndCap = LineCap.ArrowAnchor; Graphics g = container.CreateGraphics(); g.DrawLines(pen, points); }