Ich arbeite mit Charts auf C#.Spline-Diagramm, wie erhält man das angeklickte Element?
Ich möchte einen Weg kennen, um den Iten (den Spline) auf das Diagramm zu klicken, um etwas wie Farbe ändern oder ausblenden zu tun.
Ich arbeite mit Charts auf C#.Spline-Diagramm, wie erhält man das angeklickte Element?
Ich möchte einen Weg kennen, um den Iten (den Spline) auf das Diagramm zu klicken, um etwas wie Farbe ändern oder ausblenden zu tun.
Sie können das geklickt Artikel überprüfen HitTest
verwenden, wie vorgeschlagen ..:
private void chart1_MouseDown(object sender, MouseEventArgs e)
{
HitTestResult result = chart1.HitTest(e.X, e.Y);
// now do what you want with the data..:
if (result.Series != null && result.PointIndex >= 0)
Text = "X = " + result.Series.Points[result.PointIndex].XValue +
" Y = " + result.Series.Points[result.PointIndex].YValues[0];
}
den Benutzer Um Ihnen einen möglichen Treffer anzeigen kann:
private void chart1_MouseMove(object sender, MouseEventArgs e)
{
HitTestResult result = chart1.HitTest(e.X, e.Y);
Cursor = result.Series != null ? Cursors.Hand : Cursors.Default;
}
Machen Sie Ihren Benutzern einen Gefallen, indem Sie die Spline-Linien etwas größer machen:
eachOfYourSeries.BorderWidth = 4;
Natürlich ist das Diagramm, das Sie eine kontrollierte Klick ohne in erster Zoomen unmöglich macht, zeigen ..
Nun, wenn alles, was Sie wollen, ist ein Series
versteckt oder Änderung seiner Color
die HitTestResult
gut genug ist:
result.Series.Enabled = flase;
oder
result.Series.Color = Color.Fuchsia;
Aber das clic zugreifen ked Werte, kann es nicht sein ..:
Beachten Sie, dass vor allem ein Spline
oder ein Line
Graph, benötigen nur sehr wenige DataPoints
ihre Linien zu schaffen; so ist das Ergebnis von HitTest
einfach nicht genug; es wird Ihnen sagen, welche Serie angeklickt wurde und auch die am nächstenDataPoint
aber an den richtigen Werte erhalten Sie noch die Pixel-Daten zu konvertieren müssen Werte.
Also statt der HitTest
führen Sie die praktische Funktion PixelPositionToValue
verwenden bevorzugen:
float px = (float)yourChartArea.AxisX.PixelPositionToValue(e.X);
Dadurch werden die Werte alle zwischen dem tatsächlichen DataPoints
bekommen. Natürlich können Sie das gleiche gilt für die Y-Werte tun:
float py = (float)yourChartArea.AxisY.PixelPositionToValue(e.Y);
Hinweis, dass Sie nur diese Funktion nutzen zu können, wenn das Diagramm mit der Bestimmung des Layouts nicht besetzt ist; offiziell ist dies nur während einer der drei Paint
Ereignisse. Aber ich fand, dass in der Praxis auch ein Mausereignis in Ordnung ist. Sie erhalten einen Nullwert, wenn das Diagramm nicht bereit ist.
Ich habe nie selbst mit ihnen gearbeitet (warum antworte ich nicht), aber wenn das Diagramm-Steuerelement diese Ereignisse nicht standardmäßig hat, bin ich sicher, dass Sie etwas versuchen könnten, das ein Mausklick-Ereignis verwendet die Position von diesem und überprüfen Sie gegen alle Ihre Spline-Pfade, um zu sehen, ob irgendjemand den geklickten Punkt oder in der Nähe durchquert (exakte Pixelgenauigkeit würde es einem Benutzer schwer machen, auf jeden Spline zu klicken) –
Guter Fang; aber speziell für Spline & Liniendiagramme schneidet der HitTest ihn einfach nicht, da er die Werte für alle Teile zwischen den Datenpunkten, dh für die meisten Linien oder Kurven, verfehlt. – TaW