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.682 mal aufgerufen.
Anzeige
![]() ![]() ![]() 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 Neu! sevEingabe 3.0 ![]() Einfach stark! Ein einziges Eingabe-Control für alle benötigten Eingabetypen und -formate, inkl. Kalender-, Taschenrechner und Floskelfunktion, mehrspaltige ComboBox mit DB-Anbindung, ImageComboBox u.v.m. |
||||||||||||||||
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. |