Laden...

Chart in Klasse erstellen und in Form anzeigen lassen.

Erstellt von Schlupp vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.212 Views
S
Schlupp Themenstarter:in
3 Beiträge seit 2018
vor 5 Jahren
Chart in Klasse erstellen und in Form anzeigen lassen.

Hallo zusammen,

ich habe gerade eine kurze grundlegende Frage, da ich hierbei nicht weiter komme.
Ich habe eine Windowsform mit einem Button und einem ChartDiagramm.
Jetzt habe ich eine extra Klasse erstellt in der ich die Daten für das Diagramm erstelle und wenn ich auf den Butten klicke, sollen mir diese im Diagramm angezeigt werden. Jedoch passiert nichts. Könnte mir da jemand evtl. helfen wo mein Fehler steckt?

Code der Windowsform


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;
using System.Drawing;

namespace ChartTest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Chart chart = new Chart();
            chart.GetChartData();
            chart1.Update();
        }
    }
}

Code aus der Klasse Chart in der das Chart erstellt wird


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;
using System.Drawing;

namespace ChartTest
{


    public class Chart
    {
        Form1 frm = new Form1();

        public void GetChartData()
        {
        frm.chart1.Series.Clear();
            
        // Data arrays
        string[] seriesArray = { "Cat", "Dog", "Bird", "Monkey" };
        int[] pointsArray = { 2, 1, 7, 5 };

        // Set palette
        frm.chart1.Palette = ChartColorPalette.EarthTones;

        // Set title
        frm.chart1.Titles.Add("Animals");

        // Add series.
        for (int i = 0; i<seriesArray.Length; i++)
            {
                Series series = frm.chart1.Series.Add(seriesArray[i]);
                series.Points.Add(pointsArray[i]);
            }
        }        
    }   
}

Irgendwie stehe ich nämlich da gerade auf dem Schlauch. Danke schon einmal für eure Hilfe.

5.657 Beiträge seit 2006
vor 5 Jahren

Hi Schlupp,

in der Chart-Klasse erstellst du eine neue Instanz von Form1 und setzt dort die Daten. Du solltest daher die Daten in der Instanz setzen, die bereits angezeigt wird.

Weeks of programming can save you hours of planning

S
Schlupp Themenstarter:in
3 Beiträge seit 2018
vor 5 Jahren

Hi MrSparkle,

danke für die schnelle Antwort, aber irgendwie stehe ich gerade auf dem Schlauch.
Wäre es möglich ein kurzes Bsp. aufzuzeigen?

Danke.

1
124 Beiträge seit 2012
vor 5 Jahren

Ich bin mal so frei.

z.B. ein konstruktor in der Chart Klasse:

public Chart(Form1 form1)
{
 this.frm = form1;
}

und dann in Form1

Chart chart = new Chart(this);

Was mir gerade aufgefallen ist, das durch deine Chart Klasse da auch ein zimliches durcheinander herrscht. Besser wäre MyChart oder ähnliches. Des Weiteren hast du einmal chart und chart1.

Also erstmal Code aufräumen.

Gruß

4.930 Beiträge seit 2008
vor 5 Jahren

Warum erstellst du eine eigene Klasse Chart, wenn du dadrin auf frm.chart1 zugreifen willst? Erzeuge in der Form-Klasse passende Methoden dafür.

5.657 Beiträge seit 2006
vor 5 Jahren

Wenn du mit dem Verständnis davon bereits Probleme hast, empfehle ich zunächst einen Blick in:
[FAQ] Wie finde ich den Einstieg in C#?
[Hinweis] Bitte schau in die SDK-/MSDN-Doku
[Artikel] Debugger: Wie verwende ich den von Visual Studio?

Weeks of programming can save you hours of planning

S
Schlupp Themenstarter:in
3 Beiträge seit 2018
vor 5 Jahren

Ok, danke für die Info. Hat funktioniert.

F
10.010 Beiträge seit 2004
vor 5 Jahren

Und bitte, NIEMALS von einer Hilfsklasse auf eine Form zugreifen, das ist schlecht wartbar und ist nie nötig.