2016-06-13 15 views
0

Es war schon eine Weile, da ich so etwas wie dies tat, aber ich versuche, eine benutzerdefinierte Diagramm Klasse aus der DataVisualization.Chart Klasse abgeleitet zu erstellen, ich habe folgendC# Erstellen von benutzerdefinierten Diagramm Klasse

public class clsCustomChart:System.Windows.Forms.DataVisualization.Charting.Chart 
{ 

    public clsCustomChart(string strChartTitle, double[] dblX, double[] dblY) 
    { 
     // Create the chart 

     // Create the chart 
     Chart chartReturn = new Chart(); 
     chartReturn.BackColor = Color.FromArgb(50, Color.DarkGray); 
     chartReturn.BorderlineDashStyle = ChartDashStyle.Solid; 
     chartReturn.BorderlineColor = Color.Black; 
     chartReturn.Width = 300; 
     chartReturn.Height = 300; 

     // Create the legend 
     Legend l = new Legend("Legend"); 
     l.Docking = Docking.Bottom; 
     l.BackColor = Color.Transparent; 
     chartReturn.Legends.Add(l); 

     // Create the chart area 
     ChartArea a = new ChartArea("ChartArea1"); 
     a.Area3DStyle.Enable3D = false; 
     a.Area3DStyle.WallWidth = 0; 
     a.BackColor = Color.FromArgb(100, Color.Black); 

     chartReturn.ChartAreas.Add(a); 

     // Create the axis 
     a.AxisX.LineColor = Color.Silver; 
     a.AxisX.MajorGrid.Enabled = true; 
     a.AxisX.MinorGrid.Enabled = false; 
     a.AxisX.MajorGrid.LineColor = Color.FromArgb(50, Color.Black); 
     a.AxisX.LabelStyle.Font = new System.Drawing.Font("Arial", 8F); 

     a.AxisY.LineColor = Color.Silver; 
     a.AxisY.MajorGrid.Enabled = true; 
     a.AxisY.MinorGrid.Enabled = false; 
     a.AxisY.MajorGrid.LineColor = Color.FromArgb(50, Color.Black); 
     a.AxisY.LabelStyle.Font = new System.Drawing.Font("Arial", 8F); 

     // Chart title 
     chartReturn.Titles.Add(new Title(strChartTitle)); 

     // Add the data 
     // Create the data series 
     Series s = new Series("IN"); 
     s.ChartType = SeriesChartType.Line; 

     dblX.ToList<double>().ForEach(x => { s.Points.Add(x); }); 
     s.Color = Color.FromArgb(200, Color.Red); 
     s.BorderWidth = 3; 

     Series s2 = new Series("OUT"); 
     s2.ChartType = SeriesChartType.Line; 

     dblY.ToList<double>().ForEach(x => { s2.Points.Add(x); }); 
     s2.Color = Color.FromArgb(200, Color.Green); 
     s2.BorderWidth = 3; 

     chartReturn.Series.Add(s); 
     chartReturn.Series.Add(s2); 

     chartReturn.SaveImage("c:/test/" + DateTime.Now.ToString("ddMMyyyy_HHmmss") + ".jpeg", ChartImageFormat.Jpeg); 

    } 

} 

Die Code, der in dem benutzerdefinierten Diagramm ist, wird alle getestet und funktioniert gut, wenn Sie als ein Diagrammobjekt erstellen, und die benutzerdefinierte Klasse speichert das Diagramm als Bild fein.

Allerdings, wenn ich versuche, diese in einer Form

Chart C = (Chart)new clsCustomChart("TEST",x,y); 

this.Controls.Add(C); 

ich nicht bekommen, um das Diagramm ...... kann jemand raten .....

TIA

+0

können Sie die DataVisualization Chart-Steuerelement an das Fenster Formular hinzufügen und sehen, wie die IDE fügt den Code hinzu? Von dort können Sie den Diagrammtyp durch Ihren eigenen abgeleiteten Typ ersetzen. – dfdsfdsfsdf

+0

Versuchen Sie, einen Wert von einem Konstruktor "zurückzugeben"? Das Diagramm, das Sie definieren, ist in Ihrem benutzerdefinierten Steuerelement geschachtelt und nicht das benutzerdefinierte Steuerelement selbst. – nicholas

+0

Entschuldigung, verstehe ich nicht? Ich habe meinen Code aus der Klasse im Formular "form_load" verwendet und zeichnet das Diagramm gut. –

Antwort

2
// Create the chart 
Chart chartReturn = new Chart(); 

Dies erstellt ein Diagramm, das Sie dann stylen und wegwerfen.

Löschen Sie es und ersetzen Sie chartReturn durch this!

Auch Sie können Sie es jemals platzieren in einem Formular über die Designer wollen eine parameterlos Konstruktor, falls zur Verfügung zu stellen ..

+0

Ich habe versucht, zuerst, das ist, was ich dachte, es wäre, aber ich bekam eine readonly, als ich tring, um dies zu schaffen, vielen Dank, ich wusste, mein Gedächtnis war nicht so schlecht :) –

Verwandte Themen