Настройка и события (элементы управления диаграммы)
В элементе управления диаграммы можно использовать события для настройки работы диаграмм, например выполнения нестандартных операций рисования. Элементы управления диаграммы для ASP.NET и для Windows Forms предоставляют различные наборы событий. Полный список событий для каждого элемента управления см. в описании классов System.Web.UI.DataVisualization.Charting.Chart и System.Windows.Forms.DataVisualization.Charting.Chart.
PrePaint и PostPaint
Чаще всего используются события PrePaint и PostPaint. Они запускаются до и после рисования каждого элемента диаграммы.
Примечание
Эти два события не запускаются для объектов Series, если в области диаграммы включен трехмерный режим.
Чтобы найти элемент диаграммы, для которого текущее событие является триггером, используйте свойство ChartPaintEventArgs.ChartElement.
Следующий обработчик события рисует шесть концентрических окружностей после рисования элемента Series и выделяет точку данных с именем «Product F».
Private Sub chart1_PostPaint(ByVal sender As Object, ByVal e As ChartPaintEventArgs)
If TypeOf e.ChartElement Is Series Then
Dim series As Series = DirectCast(e.ChartElement, Series)
Dim position As System.Drawing.PointF = System.Drawing.PointF.Empty
' Find data point with label "Product F".
For Each point As DataPoint In series.Points
position.X += 1
If point.AxisLabel = "Product F" Then
position.Y = CSng(point.YValues(0))
Exit For
End If
Next
' Get relative coordinates of the data point values found.
position.X = CSng(e.ChartGraphics.GetPositionFromAxis("Default", AxisName.X, position.X))
position.Y = CSng(e.ChartGraphics.GetPositionFromAxis("Default", AxisName.Y, position.Y))
' Convert relative coordinates to absolute coordinates.
position = e.ChartGraphics.GetAbsolutePoint(position)
' Draw custom object.
For radius As Integer = 20 To 79 Step 10
e.ChartGraphics.Graphics.DrawEllipse(System.Drawing.Pens.Red, position.X - radius / 2, _
position.Y - radius / 2, radius, radius)
Next
End If
End Sub
private void chart1_PostPaint(object sender, ChartPaintEventArgs e)
{
if (e.ChartElement is Series)
{
Series series = (Series)e.ChartElement;
System.Drawing.PointF position = System.Drawing.PointF.Empty;
// Find data point with label "Product F".
foreach (DataPoint point in series.Points)
{
++position.X;
if (point.AxisLabel == "Product F")
{
position.Y = (float)point.YValues[0];
break;
}
}
// Get relative coordinates of the data point values found.
position.X = (float)e.ChartGraphics.GetPositionFromAxis("Default", AxisName.X, position.X);
position.Y = (float)e.ChartGraphics.GetPositionFromAxis("Default", AxisName.Y, position.Y);
// Convert relative coordinates to absolute coordinates.
position = e.ChartGraphics.GetAbsolutePoint(position);
// Draw custom object.
for (int radius = 20; radius < 80; radius += 10)
{
e.ChartGraphics.Graphics.DrawEllipse(System.Drawing.Pens.Red, position.X - radius / 2,
position.Y - radius / 2, radius, radius);
}
}
}