weixin_42074469 2022-05-18 10:20 采纳率: 100%
浏览 849
已结题

C# winform中chart使用tooltip显示Y轴坐标

在一个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轴游标跟随移动
        }

@CSDN专家-showbo

  • 写回答

3条回答 默认 最新

  • CSDN专家-showbo 2022-05-18 10:25
    关注

    改下面就行,效果如下

    
    
            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;
            }
        }
    
    

    参考:

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 5月26日
  • 已采纳回答 5月18日
  • 创建了问题 5月18日

悬赏问题

  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置