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

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日

悬赏问题

  • ¥150 寻找王者荣耀开发作者,合作或者解答
  • ¥15 乳腺癌数据集 相关矩阵 特征选择
  • ¥15 我的游戏账号被盗取,请问我该怎么做
  • ¥15 通关usb3.0.push文件,导致usb频繁断连
  • ¥15 有没有能解决微信公众号,只能实时拍照,没有选择相册上传功能,我不懂任何技术,,有没有给我发个软件就能搞定的方法
  • ¥15 Pythontxt文本可视化
  • ¥15 如何基于Ryu环境下使用scapy包进行数据包构造
  • ¥15 springboot国际化
  • ¥15 搭建QEMU环境运行OP-TEE出现错误
  • ¥15 Minifilter文件保护