2016-04-19 35 views
0

Gibt es eine Möglichkeit, ein Diagramm in einer C# -Formularanwendung in Visual Studio 2013 zu animieren, um anzuzeigen, dass die Linie nach dem Drücken einer Schaltfläche allmählich auf den Bildschirm gezeichnet wird? Vielen Dank im Voraus :)Wie animiert man ein Diagramm in Visual Studio C#?

+4

Ja, es gibt einen Weg, ... Was hast du bisher versucht? – mituw16

+0

Sicher. Verwenden Sie für Animationen in Winforms einen Timer. Verwenden Sie WinForms? __Always__ tag Ihre Frage richtig. – TaW

+0

Ich habe noch nichts probiert, weil ich nicht wusste, wo ich anfangen soll. Ja, ich verwende eine Windows Form Application in Visual Studio, wie würde ich einen Timer dafür verwenden? –

Antwort

1

Hier ist ein Beispiel, das Ihnen den Einstieg erleichtern sollte. Es schafft erste Testdaten und verwendet dann eine Timer sie angezeigt werden ..:

List<PointF> data = new List<PointF>(); 
Timer timer = new Timer(); 

private void button1_Click_1(object sender, EventArgs e) 
{ 
    data.Clear(); 

    for (int i = 0; i < 400; i++) 
    { 
     float x = i/50f * (float)(Math.Cos(i/10f)); 
     float y = i/50f * (float)(Math.Sin(i/10f)); 
     data.Add(new PointF(x,y)); 
    } 

    chart1.Series.Clear(); 
    Series S1 = chart1.Series.Add("S1"); 
    Series S2 = chart1.Series.Add("S2"); 

    S2.MarkerSize = 2; 
    S2.MarkerStyle = MarkerStyle.Circle; 
    S2.Color = Color.Green; 
    S1.Color = Color.FromArgb(64, Color.Red); 
    S1.BorderWidth = 9; 

    S2.ChartType = SeriesChartType.Point; 
    S1.ChartType = SeriesChartType.Line; 
    chart1.ChartAreas[0].AxisX.Minimum = -10; 
    chart1.ChartAreas[0].AxisX.Maximum = 10; 
    chart1.ChartAreas[0].AxisY.Minimum = -10; 
    chart1.ChartAreas[0].AxisY.Maximum = 10; 
    chart1.ChartAreas[0].BackColor = Color.White; 

    timer.Interval = 15; 
    timer.Start(); 
} 

Bitte beachte, dass ich eine PointF Struktur bin mit der Testdaten zu speichern, wie es ein praktisch Gleitkomma-Struktur ist ..

Dies ist das Timer.Tick Ereignis. Vergiss nicht hook it up! Hier zeichnen wir alle Daten bis wir fertig sind; dann stoppen wir die Timer:

void timer_Tick(object sender, EventArgs e) 
{ 
    Series S1 = chart1.Series[0]; 
    Series S2 = chart1.Series[1]; 
    int pointsSoFar = S1.Points.Count; 
    if (pointsSoFar < data.Count) 
    { 
     S1.Points.AddXY(data[pointsSoFar].X, data[pointsSoFar].Y); 
     S2.Points.AddXY(data[pointsSoFar].X, data[pointsSoFar].Y); 
    } 
    else 
    { 
     timer.Stop(); 
     chart1.ChartAreas[0].BackColor = Color.AntiqueWhite; 
    } 
} 

Bitte beachte, dass ich gewählt habe, die Linien in einer halbtransparenten Farbe zu zeichnen. Es ist lehrreich, die Ergebnisse der starken Überlappung der Liniensegmente zu beobachten!

enter image description here

Und hier ..

..die resultierende ..

.. Animation ..:

enter image description here

Verwandte Themen