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: 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 Dieser Tipp wurde bereits 12.146 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
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. |
sevISDN 1.0 Überwachung aller eingehender Anrufe! Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Tipp des Monats April 2024 Skyfloy Chart von Microsoft und dazu noch gratis Tutorial für Microsoft Chart Controls für Microsoft .NET Framework 3.5 sevZIP40 Pro DLL Zippen und Unzippen wie die Profis! Mit nur wenigen Zeilen Code statten Sie Ihre Anwendungen ab sofort mit schnellen Zip- und Unzip-Funktionen aus. Hierbei lassen sich entweder einzelnen Dateien oder auch gesamte Ordner zippen bzw. entpacken. |
||||||||||||||||
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. |