Benutzer mit den meisten Antworten
MsChart: Reihenfolge von ChartAreas ändern oder aktive Area festlegen

Frage
-
Moin,
Ich habe in einem Chart mehrere Chartareas hierarchisch geordnet. Nun wollte ich ein Mausklickevent via HitTestResult auswerten und stelle dabei fest, dass die letzte ChartArea in der Liste das MausEvent erhält.
Ich möchte nicht meine ganze Hierarchie umbauen und suche deshalb nach einer Lösung, wie ich die erste Area in der Liste für die Mausevents aktivieren kann. Zorder habe ich nicht gefunden und BringToFront/SendToBack ist für untergeordnete Objekte ja nicht üblich.
Danke, Messie
bin neu hier...
Antworten
-
Hallo Messie,
Du läßt dir einfach alle Hits zurückgeben und wählst dann aus dem HitTestResult-Array nur jene aus, die Dich interessieren:
private void chart1_MouseClick(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { Chart chart = ((Chart)sender); HitTestResult[] hits = chart.HitTest(e.X, e.Y, false, new ChartElementType[] { ChartElementType.DataPoint }); HitTestResult hit = Array.Find(hits, h => h.ChartArea != null && h.ChartArea.Name == "YourFirstChartArea"); } }
Gruß
Marcel- Als Antwort markiert Messie1 Donnerstag, 11. August 2011 17:27
-
Hallo Messie,
Der Aufruf der Methode Chart.HitTest() wird intern an System.Windows.Forms.DataVisualization.Charting.Selection.HitTest() delegiert, wo die ChartAreas nacheinander als Stapel bearbeitet werden. Die Verarbeitung beginnt also mit der zuletzt hinzugefügten ChartArea und kämpft sich bis zur ersten, untersten ChartArea in einer relativ engen Schleife durch. Sobald auf der jeweiligen Ebene ein Treffer gefunden wurde, wird dieser zu einer List<HitTestResult> hinzugefügt, die dann zuguterletzt über ToArray() das HitTestResult[] aus dem obigen Beispiel zurückgibt.
Diese Layer-Technik wird z.B. oft im Zusammenhang mit Bildverarbeitungstechniken verwendet.
Gruß
Marcel- Als Antwort markiert Messie1 Freitag, 12. August 2011 07:28
Alle Antworten
-
Hallo Messie,
Du läßt dir einfach alle Hits zurückgeben und wählst dann aus dem HitTestResult-Array nur jene aus, die Dich interessieren:
private void chart1_MouseClick(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { Chart chart = ((Chart)sender); HitTestResult[] hits = chart.HitTest(e.X, e.Y, false, new ChartElementType[] { ChartElementType.DataPoint }); HitTestResult hit = Array.Find(hits, h => h.ChartArea != null && h.ChartArea.Name == "YourFirstChartArea"); } }
Gruß
Marcel- Als Antwort markiert Messie1 Donnerstag, 11. August 2011 17:27
-
Hallo Messie,
Der Aufruf der Methode Chart.HitTest() wird intern an System.Windows.Forms.DataVisualization.Charting.Selection.HitTest() delegiert, wo die ChartAreas nacheinander als Stapel bearbeitet werden. Die Verarbeitung beginnt also mit der zuletzt hinzugefügten ChartArea und kämpft sich bis zur ersten, untersten ChartArea in einer relativ engen Schleife durch. Sobald auf der jeweiligen Ebene ein Treffer gefunden wurde, wird dieser zu einer List<HitTestResult> hinzugefügt, die dann zuguterletzt über ToArray() das HitTestResult[] aus dem obigen Beispiel zurückgibt.
Diese Layer-Technik wird z.B. oft im Zusammenhang mit Bildverarbeitungstechniken verwendet.
Gruß
Marcel- Als Antwort markiert Messie1 Freitag, 12. August 2011 07:28