C# Chart, Series

  • Ersteller Ersteller Donnidonis
  • Erstellt am Erstellt am
D

Donnidonis

Gast
Hey Leute,
Ich hab nen kleines Problemchen.
Ich habe ein Chart Objekt dem ich ein Series Objekt zuweise.
Jetzt hätte ich es gern so, dass nach 200 Einträgen, der Chart quasi "wandert".
Also Wert 1 verschwindet, 2 wandert auf 1, 3 auf 2, 4 auf 3 und so weiter.
Nun hab ich mir gedacht ich benutz die removeAt Methode um den ersten Wert zu löschen.
Jetzt frag ich mich ob es eine einfache Methode gibt um die Werte "durchrutschen" zu lassen, oder muss ich mir selbst ne Methode schreiben? Ist ja an sich kein Problem, wollte nur gern wissen ob es eine einfacheren Weg gibt.

Liebe Grüße
 
Wenn die Werte wandern sollen, müssen ja in gewissen Ticks neue Werte dazu kommen.
Wenn du nun immer nur die aktuellsten 200 Werte rein legst, dann hast du diesen "Wander"-Effekt.
Also nicht das ganze Array an Werten/die ganze Liste übergeben, sondern nur die 200 letzten daraus.

Womit zeichnest du die Graphen genau?
Zeig doch mal den Code, wo du dem Chart Objekt die Werte zuweist...
 
Ich hänge mal eine Frage hier passend ein :)
Die Chart-Klasse hat, wenn ich das auf MSDN richtig sehe, eine Property: Series, welche eine SeriesCollection-Klasse darstellst. Habe in letzter Zeit wenig Programmiert, aber wurde bei den Collections nicht immer automatisch nachgerückt?

Dreister weise behaupte ich einfach mal, probiere es mit "Refesh" bei deinem Chart. Aber wie, mehr oder weniger, angedeutet ist die Aussage nur rein aus dem was ich auf die schnelle bei MSDN gelesen habe.
 
Naja, nachgerückt wird nicht automatisch, wenn du in der Liste am "Ende" was hinzufügst, dann musst du das erste Element entfernen, um den Nachrückeffekt abzubilden... und dann kanns sein, dass man die Chart updaten oder refreshen muss...
 
Okay, danke euch erstmal. Ich werde erstmal meinen Code posten:
Code:
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            addPoint(count, Double.Parse(serialPort1.ReadLine()));
            count++;
        }
Zur Erklärung:
Ich bekomme über die Serielle Schnittstelle ein paar Werte, liegen zwischen 0 und 1023.
Diese werden dann mit der addPoint() Methode an den Chart angehangen:
Code:
private void addPoint(double x, double y)
        {
            if (licht.Points.Count > 200)
            {
                licht.Points.RemoveAt(0);
                chart1.Update();
            }
            licht.Points.AddXY(x, y);
        }
Jetzt dacht ich sollte dieser Code eigentlich Funktionieren.. Wenn mehr als 200 Einträge vorhanden sind, wird der erste gelöscht und dann geupdated. Meine Count-Variable zählt einfach nur immer an welchen X-Wert ich mich gerad befinde.

Mit diesem Code bekomm ich aber ab dem 215. Element Fehler..
Auch werden die vorherigen Einträge nicht korrekt entfernt..


Edit:
Okay, einen Fehler hab ich schon einmal behoben, ich muss an die removeAt() ja jedesmal 0 übergeben, da er durch das Updaten ja alles nach unten schiebt..
Nun mein 2. Fehler:
Anhang anzeigen 314818
Dieser kommt nach dem 220. Eintrag ca..
 
Zuletzt bearbeitet von einem Moderator:
Vielleicht mal rein Debuggen, bei welchem Schritt das passiert? Anscheinend iterierst du über eine Liste und änderst sie währenddessen...ungesund...
Zeig mal, wo genau der Fehler passiert.
 
Zurück
Oben