使用第三方Steema的TeeChart控件,设置鼠标放在某一线条点上,显示某一点的数据标签问题(虚线型十字光标基准线,放在线上显示对应点的二维坐标轴数据数据),调用InitTeeChartTipTools方法即可:
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
|
/// <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 ; } // 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; } } |
以上就是c# 设置TeeChart控件的提示文本的详细内容,更多关于c# 设置提示文本的资料请关注服务器之家其它相关文章!
原文链接:https://www.cnblogs.com/pilgrim/p/10288061.html