I think annotation is what you want. Here's something that may work for you, I have been playing with this and it works ok:
Dim CA As ChartArea
Dim S1 As Series
Dim VA As VerticalLineAnnotation
Private Sub Create_Annotation()
CA = Chart1.ChartAreas(0)
S1 = Chart1.Series(0)
' the vertical line
VA = New VerticalLineAnnotation()
VA.AxisX = CA.AxisX
VA.AllowMoving = True
VA.IsInfinitive = True
VA.ClipToChartArea = CA.Name
VA.Name = "myLine"
VA.LineColor = Color.Black
VA.LineWidth = 6
VA.X = 12
Chart1.Annotations.Add(VA)
End Sub
Dim pt1 As Integer
Dim pt As Integer
Private Sub chart1_AnnotationPositionChanging(sender As Object, e As AnnotationPositionChangingEventArgs) Handles Chart1.AnnotationPositionChanging
pt1 = CInt(e.NewLocationX)
pt = Math.Floor(e.NewLocationX)
If pt < 1 Then
e.NewLocationX = 1
ElseIf pt >= S1.Points.Count - 1 Then
e.NewLocationX = S1.Points.Count
End If
If pt > 1 And pt < S1.Points.Count - 1 Then
Dim [step] As Double = (S1.Points(pt + 1).YValues(0) - S1.Points(pt).YValues(0))
Dim deltaX As Double = e.NewLocationX - S1.Points(pt).XValue
Dim val As Double = S1.Points(pt).YValues(0) + [step] * deltaX
Dim valueY = Chart1.ChartAreas(0).AxisY.PixelPositionToValue(e.NewLocationY)
'TextBox1.Text = [String].Format("X = {0:0.00} Y = {1:0.00}", e.NewLocationX, val) 'Textbox is just for testing - you use what you want...
End If
Chart1.Update()
End Sub