Добавление нескольких аннотаций в один график MS Chart - PullRequest
0 голосов
/ 10 июля 2019

Я хочу добавить две аннотации для двух разных линейных диаграмм, имеющих одинаковое значение 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

enter image description here

...