C# Teechart 鼠标悬停 显示数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication2 { public partial class Form2 : Form { public Form2() { InitializeComponent(); this .tChart1.Series[0].Add(1, 2); this .tChart1.Series[0].Add(2, 6); this .tChart1.Series[0].Add(6, 3); } private double xval; private void cursorTool1_Change( object sender, Steema.TeeChart.Tools.CursorChangeEventArgs e) { try { xval = e.XValue; tChart1.Header.Text = "" ; for ( int i = 0; i < tChart1.Series.Count; i++) if (tChart1.Series[i] is Steema.TeeChart.Styles.Custom) { tChart1.Header.Text += tChart1.Series[i].Title + ": Y(" + e.XValue.ToString( "0.00" ) + ")= " ; tChart1.Header.Text += InterpolateLineSeries(tChart1.Series[i] as Steema.TeeChart.Styles.Custom, e.XValue).ToString( "0.00" ) + "\r\n" ; } } catch (Exception ex) { Console.WriteLine(ex.Message); } } private double InterpolateLineSeries(Steema.TeeChart.Styles.Custom series, double xvalue) { return InterpolateLineSeries(series, series.FirstVisibleIndex, series.LastVisibleIndex, xvalue); } /// <summary> /// Calculate y=y(x) for arbitrary x. Works fine only for line series with ordered x values. /// </summary> /// <param name="series"></param> /// <param name="firstindex"></param> /// <param name="lastindex"></param> /// <param name="xvalue"></param> /// <returns>y=y(xvalue) where xvalue is arbitrary x value.</returns> private double InterpolateLineSeries(Steema.TeeChart.Styles.Custom series, int firstindex, int lastindex, double xvalue) { try { int index; for (index = firstindex; index <= lastindex; index++) { if (index == -1 || series.XValues.Value[index] > xvalue) break ; } // safeguard if (index < 1) index = 1; else if (index >= series.Count) index = series.Count - 1; // y=(y2-y1)/(x2-x1)*(x-x1)+y1 double 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; } } } } |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步