
Winform程序在panel中画线,拉动滚动条后,线条消失
我需要在pannel中画线,线条长度不定,所以用到滚动条,现在问题是:拉动滚动条,再将滚动条恢复原位置时,被遮挡部分的线条消失了,但控件是正常的,这两张图就是拉动滚动条前...
我需要在pannel中画线,线条长度不定,所以用到滚动条,现在问题是:拉动滚动条,再将滚动条恢复原位置时,被遮挡部分的线条消失了,但控件是正常的,
这两张图就是拉动滚动条前后的对比,我希望的效果是拉动滚动条后线条不消失,怎么解决 展开
这两张图就是拉动滚动条前后的对比,我希望的效果是拉动滚动条后线条不消失,怎么解决 展开
1个回答
展开全部
你是用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(),这个你自己把握吧
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询