C# chart控件中游标随着鼠标移动

前言

Winform中自带曲线显示控件,不包含游标跟随鼠标移动的功能。
本文时利用winform自带事件和属性完成游标跟随鼠标移动的功能。

chart控件中游标如何随着移动?

思路很简单,只需要在鼠标进入chart控件时,获取鼠标的位置,然后将数值赋给游标的position属性。

具体实现方法如下:

  1. 选中chart控件、F4进入属性窗口,在事件中创建MouseMove。
  2. 获取鼠标位置(2、3、4、5步骤的代码都是在MouseMove中)
double XVuale = chart1.ChartAreas[0].AxisX.PixelPositionToValue(e.X);
double YVuale = chart1.ChartAreas[0].AxisY.PixelPositionToValue(e.Y);
  1. 对鼠标位置进行限制。这里只针对Y进行限制,如果想添加的游标是X方向的就要限制X的范围。限制的主要原因是 ,chart控件中鼠标的位置范围要大于XY轴的数值范围。
if (YVuale > chart1.ChartAreas[0].AxisY.Maximum)
{
   YVuale = chart1.ChartAreas[0].AxisY.Maximum;
 }
else if (YVuale < chart1.ChartAreas[0].AxisY.Minimum)
{
  YVuale = chart1.ChartAreas[0].AxisY.Minimum;
}
  1. 最后一步就是将鼠标的位置传递给游标的posizion属性:
 chart1.ChartAreas[0].CursorY.Position = YVuale;

完整代码

 private void chart1_MouseMove(object sender, MouseEventArgs e)
 {
      double XVuale = chart1.ChartAreas[0].AxisX.PixelPositionToValue(e.X);         
      if (XVuale > chart1.ChartAreas[0].AxisX.Maximum)
          XVuale = chart1.ChartAreas[0].AxisX.Maximum;
      else if (XVuale < chart1.ChartAreas[0].AxisX.Minimum)
          XVuale = chart1.ChartAreas[0].AxisX.Minimum;
      chart1.ChartAreas[0].CursorX.Position = XVuale;
     

      double YVuale = chart1.ChartAreas[0].AxisY.PixelPositionToValue(e.Y);
      if (YVuale > chart1.ChartAreas[0].AxisY.Maximum)
          YVuale = chart1.ChartAreas[0].AxisY.Maximum;
      else if (YVuale < chart1.ChartAreas[0].AxisY.Minimum)
          YVuale = chart1.ChartAreas[0].AxisY.Minimum;
      chart1.ChartAreas[0].CursorY.Position = YVuale;
  }

实现效果
在这里插入图片描述

扩展:

1、代码中同时包含了X轴和Y轴的游标,可以根据实际情况进行选择。
2、游标总不能一直跟着鼠标动 那样的话显示的游标就是去了意义,实际上更多的情况是,游标随着鼠标移动,当移动到需要的位置时,点击一下鼠标,游标就定在那里,不再随着鼠标移动。
其实只需要对chart控件再添加一个Click事件就可以了,当然还需要一个标志位没用来限制游标的移动。具体如下:

bool AllowCursorYMove = true;//一开始允许游标移动
private void chart1_Click(object sender, EventArgs e)
{
    AllowCursorYMove = false;//点击鼠标后禁止移动
}

既然Click事件限制了游标的移动,那么在chart控件的MouseMove事件中就需要对AllowCursorYMove 进行判断

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C# 学习者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值