在一个chart中同时显示了很多曲线,我设置了一个X轴游标,跟随鼠标移动的,我想添加一个TOOLTIP来显示Y轴的坐标,问题就是要抓到最近的那条曲线上去显示Y轴的值,尝试了几次一直显示的是鼠标的Y轴的值,该怎么处理呢?
private void chart1_MouseMove(object sender, MouseEventArgs e)
{
Point point = new Point(e.X, e.Y);
chart1.ChartAreas[0].CursorX.SetCursorPixelPosition(point, true);//X轴游标跟随移动
}
改下面就行,效果如下
private void chart1_MouseMove(object sender, MouseEventArgs e)
{
Point point = new Point(e.X, e.Y);
chart1.ChartAreas[0].CursorX.SetCursorPixelPosition(point, true);//X轴游标跟随移动
if (chart1.Series.Count == 0) return;
var x = (int)chart1.ChartAreas[0].CursorX.Position;
if (x < 0 || x >= chart1.Series[0].Points.Count) return;
var builder = new StringBuilder();
builder.AppendLine("X轴:" + chart1.Series[0].Points[x].AxisLabel);
foreach (var s in chart1.Series) builder.AppendLine(s.Name + "Y轴:" + Math.Round(s.Points[x].YValues[0], 2));
chart1.ShowTooltip(toolTip1, builder.ToString(), 4, 3, 10000);
}
注意添加扩展类及往winform中添加tooltip控件
public static class CToolTip
{
/// <summary>
/// 为控件提供Tooltip
/// </summary>
/// <param name="control">控件</param>
/// <param name="tip">ToolTip</param>
/// <param name="message">提示消息</param>
public static void ShowTooltip(this Control control, ToolTip tip, string message)
{
Point _mousePoint = Control.MousePosition;
int _x = control.PointToClient(_mousePoint).X;
int _y = control.PointToClient(_mousePoint).Y;
tip.Show(message, control, _x, _y);
tip.Active = true;
}
/// <summary>
/// 为控件提供Tooltip
/// </summary>
/// <param name="control">控件</param>
/// <param name="tip">ToolTip</param>
/// <param name="message">提示消息</param>
/// <param name="durationTime">保持提示的持续时间</param>
public static void ShowTooltip(this Control control, ToolTip tip, string message, int durationTime)
{
Point _mousePoint = Control.MousePosition;
int _x = control.PointToClient(_mousePoint).X;
int _y = control.PointToClient(_mousePoint).Y;
tip.Show(message, control, _x, _y, durationTime);
tip.Active = true;
}
/// <summary>
/// 为控件提供Tooltip
/// </summary>
/// <param name="control">控件</param>
/// <param name="tip">ToolTip</param>
/// <param name="message">提示消息</param>
/// <param name="xoffset">水平偏移量</param>
/// <param name="yoffset">垂直偏移量</param>
public static void ShowTooltip(this Control control, ToolTip tip, string message, int xoffset, int yoffset)
{
Point _mousePoint = Control.MousePosition;
int _x = control.PointToClient(_mousePoint).X;
int _y = control.PointToClient(_mousePoint).Y;
tip.Show(message, control, _x + xoffset, _y + yoffset);
tip.Active = true;
}
/// <summary>
/// 为控件提供Tooltip
/// </summary>
/// <param name="control">控件</param>
/// <param name="tip">ToolTip</param>
/// <param name="message">提示消息</param>
/// <param name="xoffset">水平偏移量</param>
/// <param name="yoffset">垂直偏移量</param>
/// <param name="durationTime">保持提示的持续时间</param>
public static void ShowTooltip(this Control control, ToolTip tip, string message, int xoffset, int yoffset, int durationTime)
{
Point _mousePoint = Control.MousePosition;
int _x = control.PointToClient(_mousePoint).X;
int _y = control.PointToClient(_mousePoint).Y;
tip.Show(message, control, _x + xoffset, _y + yoffset, durationTime);
tip.Active = true;
}
}
可以参考一下
https://blog.csdn.net/baijie1314521/article/details/101904979