C# 【已上传代码】解决chart控件缩小视图后不能回到当前视图位置问题

C#中的chart控件,是非常适合用来绘图的。当想查看数据的细节时,可以设置chart控件的放大缩小功能,一般该功能是和滚动条一块使用的。
在这里插入图片描述

比如我现在想查看圆圈处的数据的细节,那么添加以下语句就可以执行放大功能以查看数据的细节

chart1.ChartAreas[0].CursorX.IsUserSelectionEnabled = true;
chart1.ChartAreas[0].CursorY.IsUserSelectionEnabled = true;

当看完细节后又想看全局数据时,那么这时我们就需要实行缩小功能,可以使用chart中的ZoomReset(int numberOfViews)函数执行缩小功能,其中的参数是要重置的缩放操作数。一般我们都是一步一步放大缩小,那么该函数的使用就是 ZoomReset(1),表示重置1次缩放操作。

//该语句表示重置X轴的一次缩放操作
chart1.ChartAreas[0].AxisX.ScaleView.ZoomReset(1);

缩小前
缩小后
上面两张图片就展示了放大和缩小后的效果。

但是这里有个问题,那就是当我放大查看数据后,并且用滚动条拖动数据到其他位置,再重置缩放操作时,视图位置会回到前一步执行放大操作的视图位置。
在这里插入图片描述
当前在00:08:00执行了放大视图操作
在这里插入图片描述
在该视图下,使用滚动条拖动数据至02:29:00
在这里插入图片描述
执行重置缩放操作后,视图位置又回到了00:08:00处,也就是执行放大操作时的视图位置。

这样对我们的使用就非常的不方便,所以如何解决这个问题呢?如何在执行重置缩放操作后,视图位置仍能定位到我们当前查看的视图位置呢?其实解决方法也很简单,那就是控制chart控件视图的位置,即控制
chart1.ChartAreas[0].AxisX.ScaleView.Position
的值。
那么要如何控制呢,只需要用一个定位点来确定便解决了。
在这里插入图片描述
现在我用当前X轴视图的中间点来当做定位点(02:28:00),为了执行重置缩放操作后,该定位点仍旧是重置缩放操作后的中间点(通俗讲就是视图位置还是在这个定位点处),那么添加以下代码便可以实现了

//用变量x记录下定位点的x值,也就是当前X轴视图的中间位置
double x = (chart1.ChartAreas[0].AxisX.ScaleView.ViewMaximum + chart1.ChartAreas[0].AxisX.ScaleView.ViewMinimum) / 2;
 
 //执行一次重置缩放操作          
chart1.ChartAreas[0].AxisX.ScaleView.ZoomReset(1);

//将X轴视图位置重新定位。用x的值减去新的X轴视图大小的一半,即为新的X轴视图定位           
chart1.ChartAreas[0].AxisX.ScaleView.Position = x - (chart1.ChartAreas[0].AxisX.ScaleView.ViewMaximum - chart1.ChartAreas[0].AxisX.ScaleView.ViewMinimum) / 2;

//这里要注意,要控制视图定位在X轴的最大最小值之间,不然视图位置就跑到数据外面去了
 if (chart1.ChartAreas[0].AxisX.ScaleView.Position < chart1.ChartAreas[0].AxisX.Minimum)
     chart1.ChartAreas[0].AxisX.ScaleView.Position = chart1.ChartAreas[0].AxisX.Minimum;
 if (chart1.ChartAreas[0].AxisX.ScaleView.ViewMaximum > chart1.ChartAreas[0].AxisX.Maximum)
     chart1.ChartAreas[0].AxisX.ScaleView.Position = chart1.ChartAreas[0].AxisX.Maximum - (chart1.ChartAreas[0].AxisX.ScaleView.ViewMaximum chart1.ChartAreas[0].AxisX.ScaleView.ViewMinimum);

在这里插入图片描述
执行重置缩放操作,可以看到,X轴的视图位置仍是以(02:28:00)为中心,并没有回到之前的(00:08:00)附近,问题完美解决。
源代码下载

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值