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

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

    参考:

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
  • 吕布辕门 后端领域新星创作者 2022-05-18 10:22
    关注
    评论
  • 有问必答小助手 2022-05-18 11:08
    关注
    您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
    PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632
    评论
查看更多回答(2条)

报告相同问题?

问题事件

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

悬赏问题

  • ¥60 悬赏求解,通过实时现场摄像头的视频图像识别其他对家打出的麻将牌,识别麻将牌,识别牌墙位置,通过识别对家打出了什么牌
  • ¥15 关于#GPU jetson#的pcie驱动开发问题,如何解决?
  • ¥15 stm32f103zet6 串口5无法收发数据
  • ¥15 关于C语言使用线程队列实现多线程并发
  • ¥15 这个运行,错误在哪里呀,大家看看吧,教导我
  • ¥15 advanceinstaller对话框设置
  • ¥100 正常上网,内部网页无法打开
  • ¥15 组件库引入并使用在若依框架未展示
  • ¥149 关于#使用python 的Flash Echarts+ajax+mysql动态数据实现饼图#的问题,请各位专家解答!
  • ¥15 RichTextBox中追加文本时报错