Personnalisation et événements (contrôles Chart)
Dans le contrôle Chart, vous pouvez utiliser des événements pour personnaliser le comportement du graphique, par exemple, en réalisant un dessin personnalisé. Les contrôles Chart pour ASP.NET et Windows Forms exposent des jeux différents d'événements. Pour obtenir la liste complète des événements de chaque contrôle, consultez System.Web.UI.DataVisualization.Charting.Chart et System.Windows.Forms.DataVisualization.Charting.Chart.
PrePaint et PostPaint
Les événements les plus couramment utilisés sont PrePaint et PostPaint. Ils sont déclenchés avant et après que chaque élément de graphique a été dessiné.
Notes
Ces deux événements ne sont pas déclenchés pour les objets Series lorsque la 3D est activée pour une zone de graphique.
Pour trouver l'élément de graphique pour lequel l'événement actuel est déclenché, utilisez la propriété ChartPaintEventArgs.ChartElement.
Le gestionnaire d'événements suivant dessine six cercles concentriques après que l'élément Series est dessiné et met l'accent sur un point de données nommé "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);
}
}
}