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

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 python动态规划:N根火柴摆出的最大数字
  • ¥20 (标签-excel)
  • ¥200 求idea10和MyEclipse7.1
  • ¥20 vb6.0截取当前窗体保存为jpg文件
  • ¥20 苹果手机不使用大疆sdk怎么获取遥控器控制信息或如何接入大疆sdk并且成功上架sdk
  • ¥20 woocommerce 注册按键重定向
  • ¥100 求书法图像文字切割代码
  • ¥15 同一个波形探测距离不同的目标,为什么fft之后得到的频谱图会发生移动,不应该时移不改变幅度谱吗(标签-matlab)(相关搜索:matlab仿真)
  • ¥15 Proteus仿真程序只能执行一次
  • ¥15 语音识别websocket报错