使用第三方Steema的TeeChart控件,设置鼠标放在某一线条点上,显示某一点的数据标签问题(虚线型十字光标基准线,放在线上显示对应点的二维坐标轴数据数据),调用InitTeeChartTipTools方法即可:

/// <summary>
/// TeeChart线条的指示工具
/// </summary>
Steema.TeeChart.Tools.CursorTool cursorTool;
/// <summary>
/// 鼠标指示显示的文本
/// </summary>
private Steema.TeeChart.Tools.Annotation annotation;
/// <summary>
/// 初始化线条的提示工具信息
/// </summary>
private void InitTeeChartTipTools(Steema.TeeChart.TChart tChart)
{//以线形式对标坐标轴cursorTool = new Steema.TeeChart.Tools.CursorTool(tChart.Chart);cursorTool.Style = Steema.TeeChart.Tools.CursorToolStyles.Both;cursorTool.Pen.Style = System.Drawing.Drawing2D.DashStyle.Dash;cursorTool.Pen.Color = Color.Black;cursorTool.FollowMouse = true;cursorTool.Change += CursorTool_Change;//设置提示文本的信息annotation = new Steema.TeeChart.Tools.Annotation(tChart.Chart);annotation.Shape.Font.Name = "Arial";annotation.Shape.Font.Size = 12;annotation.Shape.Pen.Visible = true;annotation.Shape.Shadow.Visible = false;annotation.Shape.ShapeStyle = Steema.TeeChart.Drawing.TextShapeStyle.Rectangle;annotation.Position = Steema.TeeChart.Tools.AnnotationPositions.LeftBottom;annotation.TextAlign = StringAlignment.Center;for (int i = 0; i < tChart.Series.Count; i++){tChart.Series[i].MouseEnter += Line_MouseEnter;tChart.Series[i].MouseLeave += Line_MouseLeave;}tChart.MouseLeave += TChart_MouseLeave;tChart.MouseEnter += TChart_MouseEnter;
}/// <summary>
/// 鼠标进入TeeChart的事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void TChart_MouseEnter(object sender, EventArgs e)
{cursorTool.Chart=tChartCurve.Chart;
}/// <summary>
/// 鼠标离开TeeChart的事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void TChart_MouseLeave(object sender, EventArgs e)
{cursorTool.Chart = null;
}/// <summary>
/// 当鼠标进入线条时,将TeeChart的cursorTool工具指示的线条设置为对应的线条
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Line_MouseEnter(object sender, EventArgs e)
{cursorTool.Series = sender as Steema.TeeChart.Styles.Series;
}/// <summary>
/// 当鼠标离开线条时,将TeeChart的cursorTool工具指示的线条设置为null
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Line_MouseLeave(object sender, EventArgs e)
{cursorTool.Series = null;
}
/// <summary>
/// 鼠标指示工具改变事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void CursorTool_Change(object sender, Steema.TeeChart.Tools.CursorChangeEventArgs e)
{try{Steema.TeeChart.Tools.CursorTool cursor = sender as Steema.TeeChart.Tools.CursorTool;if (cursor != null && cursor.Series != null){annotation.Text = string.Format("({0},{1})", cursor.XValue.ToString("f1"), cursor.YValue.ToString("f1"));annotation.Top = cursor.Series.GetVertAxis.CalcYPosValue(InterpolateLineSeries(cursor.Series, cursor.XValue));annotation.Left = tChartCurve.Axes.Bottom.CalcXPosValue(cursor.XValue);annotation.Top -= 20;//将文本放在鼠标上方SizeF size = this.CreateGraphics().MeasureString(annotation.Text,new Font(annotation.Shape.Font.Name, annotation.Shape.Font.Size));if (annotation.Left + size.Width + 12 >= annotation.Chart.Width){annotation.Left -= (int)size.Width + 12;//防止文本标签超出右边界而看不全
            }}else{//将其设置到控件外部annotation.Text = "";annotation.Top = annotation.Chart.Height + 5;annotation.Left = annotation.Chart.Width + 5;}}catch (Exception ex){annotation.Text = ex.Message;annotation.Top = 5;annotation.Left = 5;}
}
/// <summary>
/// 计算某一点的Y值坐标
/// </summary>
/// <param name="series">曲线</param>
/// <param name="xvalue">对应的X轴的值</param>
/// <returns>计算得到的对应的Y轴的值</returns>
private double InterpolateLineSeries(Steema.TeeChart.Styles.Series series, double xvalue)
{try{int index;for (index = series.FirstVisibleIndex; index <= series.LastVisibleIndex; index++){if (index == -1 || series.XValues.Value[index] > xvalue) break;}// safeguardif (index < 1){index = 1;}else if (index >= series.Count){index = series.Count - 1;}// y=(y2-y1)/(x2-x1)*(x-x1)+y1double dx = series.XValues[index] - series.XValues[index - 1];double dy = series.YValues[index] - series.YValues[index - 1];if (dx != 0.0){return dy * (xvalue - series.XValues[index - 1]) / dx + series.YValues[index - 1];}else{return 0.0;}}catch (Exception ex){Console.WriteLine(ex.Message);return 0.0;}
}

转载于:https://www.cnblogs.com/pilgrim/p/10288061.html

设置TeeChart的提示文本相关推荐

  1. Flutter 一个优美的用户体验的登录页面 抖动提示 文本提示

    题记 -- 执剑天涯,从你的点滴积累开始,所及之处,必精益求精,优美的应用体验 来自于细节的处理,更源自于码农的自我要求与努力 Flutter是谷歌推出的最新的移动开发框架. [x1]微信公众号的每日 ...

  2. Flutter TextField 边框样式以及提示文本 、Flutter输入文本TextField

    题记 -- 执剑天涯,从你的点滴积累开始,所及之处,必精益求精. github? 你可能需要 百度同步 CSDN 网易云课堂教程 掘金 知乎 Flutter系列文章 头条同步 本文章首发于微信公众号( ...

  3. [VB.NET]设置TextBox的提示文字

    VB2008中,TextBox 控件如何显示提示文字?(密码输入框)  用灰色显示"请输入密码",当鼠标点击的时候灰色的字就消失.当输入框中没有内容并且焦点离开输入框的时候又恢复提 ...

  4. Qt 设置Excel单元格文本属性

    前段时间通过Qt设置Excel的内容,每次设置 1-3 这种内容的时候,会被Excel自动转为日期格式. 后来查了一下,可以设置单元格为文本属性,显示内容与输入内容保持一致. 需要先设置单元格的格式再 ...

  5. Unity3D-VR《静夜诗》2-凝视宝剑和书籍时出现提示文本信息

    Unity3D-VR<静夜诗>2-凝视宝剑和书籍时出现提示文本信息 墙上宝剑对象的交互实现 1.添加预设宝剑对象 2.添加宝剑介绍文本对象 3.凝视转圈功能的实现 3.1认识GearVRS ...

  6. Android的高级控件(自动提示文本框与下拉列表)

    一.高级控件与常用控件的区别:是否使用适配器 二.适配器 1.种类 ①.数组适配器 ArrayAdapter       new ArrayAdapter<String>(this,R.l ...

  7. 设置TextBox的提示文字

    VB2008中,TextBox 控件如何显示提示文字?(密码输入框) 用灰色显示"请输入密码",当鼠标点击的时候灰色的字就消失.当输入框中没有内容并且焦点离开输入框的时候又恢复提示 ...

  8. Echarts 问题解决 —— 设置图例、提示框上下角标;坐标轴文字过多显示不全、文字竖直一列显示、让坐标轴类目隔一个换一行;

    目录 1.设置图例.提示框上下角标 1.1 修改弹框内容的方法 1.2 修改图例文字的方法 1.3 在 rich 中单独设置角标 1.4 实战 2.坐标轴文字过多显示不全 2.1 方法一:将 坐标轴上 ...

  9. 全网最详细的自定义设置 iPhone 充电提示音教程!除了音频,视频也可以!

    iOS 14 正式版出来后,热点不断,App 资源库.苹果小程序.屏幕小组件热点不断,不过这两天最火的莫过于 iPhone充电提示音,网上教程很多,但是大多数都是提供一些现成的铃声和快捷指令供你使用, ...

  10. idel 智能提示_intellij idea设置代码自动提示快捷键的详细方法.

    一些用户们在使用intellij idea的时候,不是很熟悉其中是怎么设置代码自动提示快捷键?今日这篇文章就带来了intellij idea设置代码自动提示快捷键的详细方法. intellij ide ...

最新文章

  1. pytorch nan问题
  2. CUBA Platform 7.0.4 发布,企业级应用开发平台
  3. python网页表格读取_是否可以读取网页html表格数据?
  4. 2 操作系统第一章 操作系统体系结构、中断和异常、系统调用
  5. ZZ_MODIFIED_GEEBINF 不可用
  6. acm的ubuntu (ubuntu16.04 安装指南,chrome安装,vim配置,git设置和github,装QQ)
  7. java 弹出另存为_java如何实现 io流传输过来的文件,提示另存为弹出窗口?
  8. 计算机二级C语言题库
  9. Android入门教程 (零)付费专栏课程规划
  10. MQL5 中如何调用指标
  11. idr寄存器、_STM32F103设置上拉输入后GPIOE-IDR寄存器疑惑 PA按键有效PE key2按键无效...
  12. [JS] canvas 详解
  13. CARLA 笔记(02)— Ubuntu 安装 CARLA(服务端、客户端、安装 miniconda、创建虚拟环境、更换 pip 源、生成交通流、人工控制车辆按键)
  14. 最近发现的一个学习宝库
  15. 用户输入查询与拼音首字母的结合,提高用户的操作体验
  16. MySQL - Row size too large (> 8126). Changing some columns to TEXT or BLOB
  17. 2020年一套正版的solidworks多少钱
  18. intersect 相交 范围_空间关系分类及接口方法
  19. Hi,你想要的在线创建架构图都在这儿!(四)
  20. 无刷直流电机介绍及单片机控制实例

热门文章

  1. 细心微服务架构的优势与不足那点事
  2. 进程管理之工作管理详解(job control)
  3. NodeJS基础2---1 Promise小球运动
  4. 精彩的javascript对象和数组混合相加
  5. 【python】编程语言入门经典100例--11
  6. 浅谈C#的垃圾回收-关于GC、析构函数、Dispose、and Finalize asp.net GC之析构函数详解...
  7. Java Socket编程基础实例
  8. 设置 路由模式 桥接模式
  9. 28岁程序员期权过亿,彪悍从字节退休,网友:酸了酸了!
  10. 为什么Spring MVC能自动转换json/xml,你研究过它背后的原理吗?