Я хочу добавить две аннотации для двух разных линейных диаграмм, имеющих одинаковое значение x и разные значения y.
1-я аннотация с linechart1 (Целевая линейная диаграмма) должна быть видна всегда, а 2-я аннотация с linechart2 (Задача выполнена) может быть видна только на точках данных.
Мне нужно всегда показывать аннотацию «Target», и аннотация «Taskdone» должна появляться, как только мышь находится на своей точке данных.однако, если событие mousemove, вызванное 1-й аннотацией (Target), исчезает и появляется 2-я аннотация.
Мои образцы данных здесь
Month | Target |Task Done | Total Tasks
------|--------|----------|------------
Apr | 10 | 24.92 | 30
May | 10 | 14.01 | 35
Jun | 10 | 18.97 | 40
Используемый код
private sub CreateAnnoation()
Dim pd_annotate As CalloutAnnotation = New CalloutAnnotation()
pd_annotate.CalloutStyle = CalloutStyle.RoundedRectangle
pd_annotate.CalloutAnchorCap = LineAnchorCapStyle.Arrow
pd_annotate.Height = 6
pd_annotate.AxisX = chart1.ChartAreas(0).AxisX
pd_annotate.AxisY = chart1.ChartAreas(0).AxisY
pd_annotate.SetAnchor(chart1.Series("Target").Points(1))
pd_annotate.AnchorX = chart1.Series("Target").Points(1).XValue
pd_annotate.AnchorY = chart1.Series("Target").Points(1).YValues(0)
pd_annotate.Visible = True
pd_annotate.Text = "Target : " & chart1.Series("Target").Points(1).YValues(0)
pd_annotate.BackColor = Color.LightYellow
pd_annotate.ForeColor = Color.Red
pd_annotate.Font = New System.Drawing.Font("Calibri", 12, System.Drawing.FontStyle.Bold)
pd_annotate.LineWidth = 1
pd_annotate.LineColor = Color.Black
pd_annotate.LineDashStyle = ChartDashStyle.Solid
chart1.Annotations.Add(pd_annotate)
Dim ta As CalloutAnnotation = New CalloutAnnotation
With ta
chart1.Annotations.Add(ta)
AddHandler chart1.MouseMove, AddressOf chart1_MouseMove
End With
End Sub
Private Sub chart1_MouseMove(sender As Object, e As MouseEventArgs) Handles chart1.MouseMove
Dim result As HitTestResult = chart1.HitTest(e.X, e.Y)
Dim ta As New CalloutAnnotation
If result.ChartElementType = ChartElementType.DataPoint Then
chart1.Series("TaskDone").Points(result.PointIndex).XValue.ToString()
Dim thisPt As New PointF(CSng(chart1.Series("TaskDone").Points(result.PointIndex).XValue),
CSng(chart1.Series("TaskDone").Points(result.PointIndex).YValues(1)))
With ta
.AnchorDataPoint = chart1.Series("TaskDone").Points(result.PointIndex)
'.LineWidth = 1
'.X = thisPt.X + 1
'.Y = thisPt.Y + 1
'.Text = thisPt.ToString
.CalloutStyle = CalloutStyle.Rectangle
.CalloutAnchorCap = LineAnchorCapStyle.Arrow
.Height = 5
.BackColor = Color.LemonChiffon
.ForeColor = Color.DarkBlue
.Text = "Total Task=" & chart1.Series("TaskDone").Points(result.PointIndex).YValues(1)
.Font = New Font("Calibri", 10, FontStyle.Bold)
.Visible = True
chart1.Annotations(0) = ta
chart1.Invalidate()
End With
End If
End Sub