C# chart以鼠标所在位置为中心进行缩放

这篇博客记录了作者自学C#过程中遇到的问题,即如何实现以鼠标位置为中心对折线图进行缩放。由于C#图表的最小值和最大值属性为只读,作者通过设置缩放视图来达成目标,虽然方法略显繁琐,但最终效果能保持鼠标所在点位置固定。这是作者C#学习之旅的一个起点。
摘要由CSDN通过智能技术生成

以前都用labview做一些软件,但给出去总是会遇到版本,安装包过大等一些问题,于是想自学C#,记录一下使用过程中遇到的一些问题和解决措施,便于日后回顾。
在这个项目中需要绘制折线图,由于数据比较大,需要对图表进行缩放操作,以鼠标为中心对图表进行缩放,在网上查找了一些资料没找到我想要的,于是自己想了一个解决方案,可以基本实现,但略显繁琐,由于刚开始学习C#,对一些操作不太了解,若以后遇到了更简单的解决方案,会再进行补充,目前只能用点糙方法了。
思路只有一个,就是保持鼠标所在位置与图表两端的比例不变,这样便可保持鼠标所在位置的数据点不会改变,如下图,以b点为中心进行放大操作,设置好放大比例,先找到X1位置,然后根据比列关系计算出X2位置,便可保持b点位置不变进行放大,缩小与放大思路一致,但会存在边界问题,处理略微复杂一点。labview中可以直接设置图表显示的最小值和最大值,C#这两个为只读属性,只好通过设置缩放视图的大小和起始位置来实现了。
在这里插入图片描述

void chart_MouseWheel(object sender, MouseEventArgs e)
        {
   
            Chart chart = (Chart)sender;
            double zoomfactor = 2;   //设置缩放比例
            double xstartpoint = chart.ChartAreas[0].AxisX.ScaleView.ViewMinimum;      //获取当前x轴最小坐标
            double xendpoint = chart.ChartAreas[0].AxisX.ScaleView.ViewMaximum;      //获取当前x轴最大坐标
            double xmouseponit = chart.ChartAreas[0].AxisX.PixelPositionToValue(e.X);    //获取鼠标在chart中x坐标
            double xratio = (xendpoint - xmouseponit) / (xmouseponit - xstartpoint);      //计算当前鼠标基于坐标两侧的比值,后续放大缩小时保持比例不变

            if (e.Delta > 0)    //滚轮上滑放大
            {
   
                if (chart
  • 5
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值