2016-04-26 8 views
0

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.

enter image description here

+0

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) –

+0

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

Antwort

0

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.

Verwandte Themen