Winform程序在panel中画线,拉动滚动条后,线条消失

我需要在pannel中画线,线条长度不定,所以用到滚动条,现在问题是:拉动滚动条,再将滚动条恢复原位置时,被遮挡部分的线条消失了,但控件是正常的,这两张图就是拉动滚动条前... 我需要在pannel中画线,线条长度不定,所以用到滚动条,现在问题是:拉动滚动条,再将滚动条恢复原位置时,被遮挡部分的线条消失了,但控件是正常的,
这两张图就是拉动滚动条前后的对比,我希望的效果是拉动滚动条后线条不消失,怎么解决
展开
 我来答
百度网友7695b6b
推荐于2016-10-24 · TA获得超过165个赞
知道小有建树答主
回答量:126
采纳率:0%
帮助的人:122万
展开全部

你是用drawLine画出来的线吧,重绘窗口的时候当然会消失,

你可以加个List,存储你的每一条线,就是你画出来的时候全都加到链表中,

然后添加窗体的Paint事件,在里面添加遍历绘制List中的所有线

比如

Point[] _line ;
List<Point[]> _LL=new List<Point[]>();
 
//每次调用DrawLine方法的时候,把你画线的两个点存入list中
Graphics g = this.CreateGraphics();
Pen pen;
Point p1,p2;//你要画线的点
g.DrawLine(pen,p1,p2);//画线
_line=new Point[2];
_line[0]=p1;
_line[1]=p2;
_LL.Add(_line);//储存线段
 
//可也写个方法,在窗口发生重绘的时候调用
private void redraw()
{
    try{
    this.Refresh();//先对你的Graphics的载体进行刷新
    foreach(Point[] po in _LL)//画出之前所以画过的线
    {
        g.DrawLine(pen,po[0],po[1]);
    }
    }catch{}
}

你可以根据具体要求灵活调用redraw()方法重绘,比如在窗口大小变化或者重绘,或者你拖动滚动条之后,都可以监听事件,调用redraw()就可以补充线条,但是最好控制好逻辑,比如要监听窗体Paint事件,最好加上锁,就是在初始化的时候 不让他触发redraw(),这个你自己把握吧

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式