vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Controls   |   VB-Versionen: VB2005, VB2008, VB201011.04.11
MS-Chart - Position von Chartelementen in Pixel berechnen

Die Funktion rechnet für verschiedene Chartelemente deren in Prozent angegebebene Position in Pixelwerte um.

Autor:   Dietrich HerrmannBewertung:  Views:  12.152 
ohne HomepageSystem:  Win2k, WinXP, Win7, Win8, Win10, Win11kein Beispielprojekt 

Wenn man MS-Chart einsetzt und dann über dem Chart noch andere Controls so positionieren möchte, dass sie in Abhängigkeit von einem Chartelement angeordnet werden, benötigt man praktischerweise die Koordinaten des Chartelements in Pixel. Für spezielle Chartelemente kann man die Position innerhalb des Chart-Controls in Prozentwerten setzen oder auslesen. Die nachfolgende Funktion berechnet aus den Prozentwerten entsprechende Pixelwerte. Sie wird im PostPaint-Ereignis des Chartcontrols angewendet. Eine Besonderheit liegt bei ChartArea-Element vor, weil es dafür zum einen die Eigenschaft 'Position' und zum anderen die Eigenschaft 'InnerPlotPosition' gibt. Ansonsten erklärt sich die Funktion ziemlich selbst. Sie gibt die Pixelkoodinaten des Chartelements als Rechteck-Koordinaten zurück.

Die Funktion:

Imports System.Windows.Forms.DataVisualization.Charting
...
''' <summary>
''' Ermitteln DisplayRectangle für spezielle Chartelemente in Pixel
''' </summary>
''' <param name="e">die ChartPaintEventArgs</param>
''' <param name="theChart">das Chart-Control</param>
''' <param name="theChartElement">das Chart-Element</param>
''' <param name="iPlot">soll bei ChartArea InnerPlotPosition verwendet werden ja|nein</param>
''' <returns>Rechteck mit den Pixelkoordinaten</returns>
''' <remarks>Die Funktion im PostPaint-Ereignis des Chart-Control anwenden!</remarks>
Public Function getChartElementPositionInPixel(ByVal e As ChartPaintEventArgs, _
 ByVal theChart As Chart, _
 ByVal theChartElement As ChartElement, _
 Optional ByVal iPlot As Boolean = False) As RectangleF
 
  Dim elemPos As ElementPosition, rectPix As RectangleF
 
  Select Case theChartElement.GetType.Name
    Case "ChartArea"
      Dim charta As ChartArea = theChartElement
      If iPlot Then
        elemPos = charta.InnerPlotPosition
      Else
        elemPos = charta.Position
      End If
    Case "Title"
      Dim titel As Title = theChartElement
      elemPos = titel.Position
    Case "Legend"
      Dim legende As Legend = theChartElement
      elemPos = legende.Position
  End Select
 
  rectPix = New RectangleF(elemPos.X, elemPos.Y, elemPos.Width, elemPos.Height)
  rectPix = e.ChartGraphics.GetAbsoluteRectangle(rectPix)
  Return rectPix
End Function

Aufrufbeispiel:
Es wird eine Checkbox nach rechts an der Chartarea und nach unten an dem Chart-Titel (der wiederum oben links im Chart angeordnet ist) ausgerichtet.

Private Sub Chart1_PostPaint(ByVal sender As Object, ByVal e As ChartPaintEventArgs) _
  Handles Chart1.PostPaint
 
  Dim rt As RectangleF = getChartElementPositionInPixel(e, Chart1, _
    Chart1.ChartAreas(0), True)
  Dim ra As RectangleF = getChartElementPositionInPixel(e, Chart1, _
    Chart1.Titles(0))
 
  CheckBox1.Location = _
    New Point(rt.Right - CheckBox1.Width - _
    Chart1.ChartAreas(0).AxisY2.MajorTickMark.Size, ra.Bottom - CheckBox1.Height)
End Sub



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.