C# 如何在图表区域中显示与光标位置相交的十字线?

C# 如何在图表区域中显示与光标位置相交的十字线?,c#,charts,cursor,cursor-position,C#,Charts,Cursor,Cursor Position,我有一个折线图,我添加了十字线来显示x和y轴的值,但有一个问题。X轴和Y轴光标标记的交点与鼠标光标位置不同。我使用了MouseMove事件,如图所示,我的鼠标光标(显示为红色圆圈)远离交点 如何使十字线在鼠标光标位置相交 这是我的密码 private void chrtAcq_MouseMove(object sender, MouseEventArgs e) { lab_X_Axis.Location=new Point((e.X),90); lab_Y_Axi

我有一个折线图,我添加了十字线来显示x和y轴的值,但有一个问题。X轴和Y轴光标标记的交点与鼠标光标位置不同。我使用了
MouseMove
事件,如图所示,我的鼠标光标(显示为红色圆圈)远离交点

如何使十字线在鼠标光标位置相交

这是我的密码

private void chrtAcq_MouseMove(object sender, MouseEventArgs e)
{        
    lab_X_Axis.Location=new Point((e.X),90);
    lab_Y_Axis.Location=new Point(123, (e.Y));

    if (e.X<=125 || e.Y >=495|| e.Y<=90||e.X>=830)
    {
        lab_X_Axis.Visible = false;
        lab_Y_Axis.Visible = false;
        lab_X_Axis_Cur.Visible = false;
    }
    else
    {
        lab_X_Axis.Visible = true;
        lab_Y_Axis.Visible = true;
        lab_X_Axis_Cur.Visible = true;
    }
    try
    {
        Double yValue=chrtAcq.ChartAreas[0].AxisY.PixelPositionToValue(e.Y);
        double xValue = chrtAcq.ChartAreas[0].AxisX.PixelPositionToValue(e.X);
        lab_X_Axis_Cur.Text = String.Concat(String.Concat(Math.Round(xValue, 5).ToString(), " , "), Math.Round(yValue, 5).ToString());
        lab_X_Axis_Cur.Location = new Point(750, e.Y);
    }
    catch (Exception)
    {            
        throw;
    }
}
private void chrtAcq\u MouseMove(对象发送方,MouseEventArgs e)
{        
lab_X_轴位置=新点((e.X),90);
lab_Y_轴位置=新点(123,(e.Y));
如果(e.X=495 | | e.Y=830)
{
lab_X_Axis.Visible=假;
lab_Y_Axis.Visible=假;
实验室X轴当前可见=假;
}
其他的
{
lab_X_Axis.Visible=真;
lab_Y_Axis.Visible=true;
实验室X轴当前可见=真;
}
尝试
{
Double yValue=chrtAcq.ChartAreas[0].AxisY.PixelPositionToValue(e.Y);
double xValue=chrtAcq.ChartAreas[0].AxisX.PixelPositionToValue(e.X);
lab_X_Axis_Cur.Text=String.Concat(String.Concat(Math.Round(xValue,5.ToString(),“,”),Math.Round(yValue,5.ToString());
实验室X轴当前位置=新点(750,e.Y);
}
捕获(例外)
{            
投掷;
}
}
我的图表区域和光标(红点)以及x-y轴线的显示:


我假设您使用的是
WinForms
,您希望使用交叉线来匹配光标位置,并且这些线非常薄
标签
s(这里有很多假设)!否则这个答案可能完全是胡说八道;)

问题是,当您使用您获得的属性时:

鼠标坐标值相对于引发事件的控件的坐标。与拖放操作相关的某些事件具有与窗体原点或屏幕原点相关联的鼠标坐标值

X维中的偏移量正好是窗体左边框和图表左边框之间的差值。如果计算此偏移量并将其添加到坐标中,它将正常工作:

int x_offset = chart1.Location.X;
int y_offset = chart1.Location.Y;

lab_X_Axis.Location = new Point((e.X+x_offset), 90);
lab_Y_Axis.Location = new Point(123, (e.Y+y_offset));
结果应该如下所示:

最后一点:可以使用String.Format使点值标签更具可读性:

lab_X_Axis_Cur.Text = String.Format("X: {0} Y: {1}",Math.Round(xValue, 5), Math.Round(yValue, 5));

什么数据类型是
lab_X_轴
lab_X_轴
?什么是
chrtaq
?这些是什么:
实验室X_轴
实验室X_轴
?它们是从哪里开始的,这些标签是
chrtaq
的子标签吗?我猜你需要把坐标转换成父坐标或者类似的坐标,lab_X_轴和lab_Y_轴是加号线,chrtaq是我的图表的名字。lab_X_Axis_Cur是显示X轴和y轴值的标签,该值在图片中显示为=“36.5771,0.1”。lab_X_轴和lab_y_轴是被视为正的线?你的意思是什么?它们在哪里以及如何定义?它们是标签吗???它们是嵌套在图表中还是浮在上面???MousEMove参数实际上是相对于相应的控件,而不是窗体或屏幕。现在它可能会工作;但真正的问题是这个问题仍然很不清楚。。我猜他可能想要:
chrtAcq.chartreas[0].CursorX.SetCursorPixelPosition(e.Location,true);chrtAcq.ChartAreas[0].CursorY.SetCursorPixelPosition(e.Location,true);lbl位置=新点(e.X+20,e.Y);Text=…
将我们看到的标签向右偏移20像素。但谁知道呢。。?但是,我不会偏移光标轴!代码是有效的。我没有改变它。仅包括文档中的信息,其中还指出“某些事件[…]具有与表单原点或屏幕原点相关的鼠标坐标值。”我想这也适用于这里;也许是,也许不是,如果不知道这篇文章的真正目的,就不可能说出来。@TaW-true,我添加了我操作的假设。