Partager via


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);
      }
   }
}

Voir aussi

Autres ressources

Rubriques avancées