Freigeben über


Anpassung und Ereignisse

Im Diagrammsteuerelement können Sie mithilfe von Ereignissen das Diagrammverhalten anpassen, z. B. indem Sie eine benutzerdefinierte Zeichnung durchführen.Die Diagrammsteuerelemente für ASP.NET und Windows Forms verfügen über andere Ereignissätze.Eine vollständige Liste der Ereignisse für jedes Steuerelement finden Sie unter System.Web.UI.DataVisualization.Charting.Chart und System.Windows.Forms.DataVisualization.Charting.Chart.

PrePaint und PostPaint

Die am häufigsten verwendeten Ereignisse sind PrePaint und PostPaint.Sie werden vor bzw. nach dem Zeichnen jedes Diagrammelements ausgelöst.

Hinweis

Diese beiden Ereignisse werden für Series-Objekte nicht ausgelöst, wenn 3D für einen Diagrammbereich aktiviert ist.

Verwenden Sie die ChartPaintEventArgs.ChartElement-Eigenschaft, um das Diagrammelement zu ermitteln, für das das aktuelle Ereignis ausgelöst wurde.

Der folgende Ereignishandler zeichnet sechs konzentrische Kreise, nachdem das Series-Element gezeichnet wurde, und hebt einen Datenpunkt mit dem Namen "Product F" hervor.

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

Siehe auch

Weitere Ressourcen

Weiterführende Themen