1 using DevExpress.XtraCharts;
  2 using System;
  3 using System.Collections.Generic;
  4 using System.ComponentModel;
  5 using System.Data;
  6 using System.Drawing;
  7 using System.Linq;
  8 using System.Text;
  9 using System.Windows.Forms;
 10 
 11 
 12 namespace WindowsFormsApplication1张奎
 13 {
 14     public partial class Form1 : Form
 15     {
 16         public Form1()
 17         {
 18             InitializeComponent();
 19         }
 20 
 21         private void button1_Click(object sender, EventArgs e)
 22         {
 23 
 24 
 25             #region
 26             //int tabPagesCount = 0;
 27             //ChartControl chartControl1 = new ChartControl();
 28 
 29             //// Create two series.
 30             //Series series1 = new Series("Series 1", ViewType.Bar);
 31             //Series series2 = new Series("Series 2", ViewType.Line);
 32 
 33             //// Add points to them, with their arguments different.
 34             //series1.Points.Add(new SeriesPoint("A", 10));
 35             //series1.Points.Add(new SeriesPoint("B", 12));
 36             //series1.Points.Add(new SeriesPoint("C", 17));
 37             //series1.Points.Add(new SeriesPoint("D", 14));
 38             //series2.Points.Add(new SeriesPoint("I", 2500));
 39             //series2.Points.Add(new SeriesPoint("II", 3800));
 40             //series2.Points.Add(new SeriesPoint("III", 1500));
 41             //series2.Points.Add(new SeriesPoint("IV", 1300));
 42 
 43             //// Add both series to the chart.
 44             //chartControl1.Series.AddRange(new Series[] { series1, series2 });
 45 
 46             //// Hide the legend (optional).
 47             //chartControl1.Legend.Visible = false;
 48 
 49             //// Cast the chart's diagram to the XYDiagram type, 
 50             //// to access its axes and panes.
 51             //XYDiagram diagram = (XYDiagram)chartControl1.Diagram;
 52 
 53             //// Add secondary axes to the diagram, and adjust their options.
 54             //diagram.SecondaryAxesX.Add(new SecondaryAxisX("My Axis X"));
 55             //diagram.SecondaryAxesY.Add(new SecondaryAxisY("My Axis Y"));
 56             //diagram.SecondaryAxesX[0].Alignment = AxisAlignment.Near;
 57             //diagram.SecondaryAxesY[0].Alignment = AxisAlignment.Near;
 58 
 59             //// Add a new additional pane to the diagram.
 60             //diagram.Panes.Add(new XYDiagramPane("My Pane"));
 61 
 62             //// Assign both the additional pane and, if required,
 63             //// the secondary axes to the second series. 
 64             //LineSeriesView myView = (LineSeriesView)series2.View;
 65             //myView.AxisX = diagram.SecondaryAxesX[0];
 66             //myView.AxisY = diagram.SecondaryAxesY[0];
 67             //// Note that the created pane has the zero index in the collection,
 68             //// because the existing Default pane is a separate entity.
 69             //myView.Pane = diagram.Panes[0];
 70 
 71             //// Customize the layout of the diagram's panes.
 72             //diagram.PaneDistance = 10;
 73             //diagram.PaneLayoutDirection = PaneLayoutDirection.Horizontal;
 74             //diagram.DefaultPane.SizeMode = PaneSizeMode.UseWeight;
 75             //diagram.DefaultPane.Weight = 1.2;
 76 
 77             //// Add the chart to the form.
 78             //chartControl1.Dock = DockStyle.Fill;
 79             ////this.Controls.Add(chartControl1);
 80             //this.xtraTabControl1.TabPages.Add("zbl两个pane图");//添加一个page
 81             //tabPagesCount = this.xtraTabControl1.TabPages.Count-1;//xtraTabControl2page的个数,为了删除默认的,可以用ui界面的remove
 82             //this.xtraTabControl1.TabPages[tabPagesCount].Controls.Add(chartControl1);
 83             //this.xtraTabControl1.SelectedTabPageIndex = tabPagesCount;
 84 
 85 
 86             ////
 87             //ChartControl chartControl2 = new ChartControl();
 88 
 89             //// Create two series.
 90             //Series series3 = new Series("Series 3", ViewType.Bar);
 91             //Series series4= new Series("Series 4", ViewType.Line);
 92 
 93             //// Add points to them, with their arguments different.
 94             //series3.Points.Add(new SeriesPoint("A", 10));
 95             //series3.Points.Add(new SeriesPoint("B", 12));
 96             //series3.Points.Add(new SeriesPoint("C", 17));
 97             //series3.Points.Add(new SeriesPoint("D", 14));
 98             //series4.Points.Add(new SeriesPoint("I", 2500));
 99             //series4.Points.Add(new SeriesPoint("II", 3800));
100             //series4.Points.Add(new SeriesPoint("III", 1500));
101             //series4.Points.Add(new SeriesPoint("IV", 1300));
102 
103             //// Add both series to the chart.
104             //chartControl2.Series.AddRange(new Series[] { series3, series4 });
105 
106             //// Hide the legend (optional).
107             //chartControl2.Legend.Visible = false;
108 
109             //// Cast the chart's diagram to the XYDiagram type, 
110             //// to access its axes and panes.
111             //XYDiagram diagram2 = (XYDiagram)chartControl2.Diagram;
112 
113             //// Add secondary axes to the diagram, and adjust their options.
114             //diagram2.SecondaryAxesX.Add(new SecondaryAxisX("My Axis X"));
115             //diagram2.SecondaryAxesY.Add(new SecondaryAxisY("My Axis Y"));
116             //diagram2.SecondaryAxesX[0].Alignment = AxisAlignment.Near;
117             //diagram2.SecondaryAxesY[0].Alignment = AxisAlignment.Near;
118 
119             //// Add a new additional pane to the diagram.
120             //diagram2.Panes.Add(new XYDiagramPane("My Pane"));
121 
122             //// Assign both the additional pane and, if required,
123             //// the secondary axes to the second series. 
124             //LineSeriesView myView2 = (LineSeriesView)series2.View;
125             //myView2.AxisX = diagram2.SecondaryAxesX[0];
126             //myView2.AxisY = diagram2.SecondaryAxesY[0];
127             //// Note that the created pane has the zero index in the collection,
128             //// because the existing Default pane is a separate entity.
129             //myView2.Pane = diagram2.Panes[0];
130 
131             //// Customize the layout of the diagram's panes.
132             //diagram2.PaneDistance = 10;
133             //diagram2.PaneLayoutDirection = PaneLayoutDirection.Horizontal;
134             //diagram2.DefaultPane.SizeMode = PaneSizeMode.UseWeight;
135             //diagram2.DefaultPane.Weight = 1.2;
136 
137             //// Add the chart to the form.
138             //chartControl2.Dock = DockStyle.Fill;
139             ////this.Controls.Add(chartControl1);
140             //this.xtraTabControl1.TabPages.Add("zbl两个pane图");//添加一个page
141             //tabPagesCount = this.xtraTabControl1.TabPages.Count - 1;//xtraTabControl2page的个数,为了删除默认的,可以用ui界面的remove
142             //this.xtraTabControl1.TabPages[tabPagesCount].Controls.Add(chartControl2);
143             //this.xtraTabControl1.SelectedTabPageIndex = tabPagesCount;
144 
145             #endregion
146 
147 
148             this.xtraTabPage1.PageVisible = false;
149             this.xtraTabPage2.PageVisible = false;
150             this.xtraTabControl1.TabPages.Add("三角函数图");//添加一个page,在此之前可以直接用ui界面的本控件的remove属性删除默认的两个page
151             ChartControl lineChartControl = new ChartControl();//实例化一个ChartControl
152             lineChartControl.Legend.UseCheckBoxes = true;//图例可以勾选
153 
154             //产生数据
155             List<double> xaxesList = new List<double>();//x轴数据
156             List<double> ySinList = new List<double>();//系列1-y轴数据
157             List<double> yCosList = new List<double>();//系列2-y轴数据
158             List<double> yTanList = new List<double>();//系列3-y轴数据
159             for (int i = 0; i < 20; i++)
160             {
161                 xaxesList.Add(i);
162                 ySinList.Add(Math.Sin(i));
163                 yCosList.Add(0.8*Math.Sin(i));
164                 yTanList.Add(Math.Sin(i) + Math.Cos(i));
165             }
166             //将所有系列的y值放入一个列表,这个列表是列表的列表
167             List<List<double>> YList = new List<List<double>>();
168             YList.Add(ySinList);
169             YList.Add(yCosList);
170             YList.Add(yTanList);
171             //系列内容名称
172             List<string> seriesTextList = new List<string>();//系列内容名称
173             seriesTextList.Add("预测曲线");
174             seriesTextList.Add("实验值");
175             seriesTextList.Add("cos+sin");
176             //系列名称
177             List<Series> seriesNameList = new List<Series>();
178             for (int i = 0; i < 3; i++)
179             {
180                 //完全建立一个系列,以后直接用就行了
181                 seriesNameList.Add(new Series(seriesTextList[i], ViewType.Spline));//ScatterLine点划线,实验值用这种,理论值用line
182             }
183             //将系列假如chartControl
184             for (int seriesIndex = 0; seriesIndex < 3; seriesIndex++)
185             {
186                 if(seriesIndex==0)           
187                 ShowSeries_yuce(lineChartControl, seriesNameList[seriesIndex], seriesTextList[seriesIndex], xaxesList, YList[seriesIndex]);
188             
189                 else if (seriesIndex==1)
190                 ShowSeries(lineChartControl, seriesNameList[seriesIndex], seriesTextList[seriesIndex], xaxesList, YList[seriesIndex], seriesIndex);
191 
192 
193             }
194             //显示
195             int tabPagesCount = this.xtraTabControl1.TabPages.Count - 1;//xtraTabControl2page的个数,为了删除默认的,可以用ui界面的remove
196             this.xtraTabControl1.TabPages[tabPagesCount].Controls.Add(lineChartControl);//将ChartControl这个控件添加到这个page中
197             this.xtraTabControl1.SelectedTabPageIndex = tabPagesCount;//切换到这个page为选中的page
198 
199             
200 
201 
202 
203             //尝试第二个图
204             this.xtraTabControl1.TabPages.Add("三角函数图2");//添加一个page,在此之前可以直接用ui界面的本控件的remove属性删除默认的两个page
205             ChartControl lineChartControl2 = new ChartControl();//实例化一个ChartControl
206             lineChartControl2.Legend.UseCheckBoxes = true;//图例可以勾选
207 
208             //产生数据
209             List<double> xaxesList2 = new List<double>();//x轴数据
210             List<double> ySinList2 = new List<double>();//系列1-y轴数据
211             List<double> yCosList2 = new List<double>();//系列2-y轴数据
212             List<double> y08sinList2 = new List<double>();//系列3-y轴数据
213             List<double> y05sinList2 = new List<double>();
214             for (int i = 0; i < 20; i++)
215             {
216                 xaxesList2.Add(i);
217                 ySinList2.Add(Math.Cos(i));
218                 yCosList2.Add(0.8*Math.Cos(i));
219                 y08sinList2.Add(0.6 * Math.Sin(i));
220                 y05sinList2.Add(0.5*Math.Sin(i));
221 
222             }
223             //将所有系列的y值放入一个列表,这个列表是列表的列表
224             List<List<double>> YList2 = new List<List<double>>();
225             YList2.Add(ySinList2);
226             YList2.Add(yCosList2);
227             YList2.Add(y08sinList2);
228             YList2.Add(y05sinList2);
229 
230             //系列内容名称
231             List<string> seriesTextList2 = new List<string>();//系列内容名称
232             seriesTextList2.Add("预测曲线");
233             seriesTextList2.Add("实验值");
234             seriesTextList2.Add("预测曲线2");
235             seriesTextList2.Add("实验值2");
236 
237 
238             //系列名称
239             List<Series> seriesNameList2 = new List<Series>();
240             for (int i = 0; i < 4; i++)
241             {
242                 //完全建立一个系列,以后直接用就行了
243                 seriesNameList2.Add(new Series(seriesTextList2[i], ViewType.Spline));//ScatterLine点划线,实验值用这种,理论值用line
244             }
245             //将系列加入chartControl
246             for (int seriesIndex = 0; seriesIndex < 4; seriesIndex++)
247             {
248                 if(seriesIndex==0 || seriesIndex==2) //根据数据是实验值还是预测值分别选择绘图函数 ShowSeries或者ShowSeries_yuce
249                 ShowSeries_yuce(lineChartControl2, seriesNameList2[seriesIndex], seriesTextList2[seriesIndex], xaxesList2, YList2[seriesIndex]);
250                
251                 else 
252                 ShowSeries(lineChartControl2, seriesNameList2[seriesIndex], seriesTextList2[seriesIndex], xaxesList2, YList2[seriesIndex], seriesIndex);
253             }
254             //显示
255             tabPagesCount = this.xtraTabControl1.TabPages.Count - 1;//xtraTabControl2page的个数,为了删除默认的,可以用ui界面的remove
256             this.xtraTabControl1.TabPages[tabPagesCount].Controls.Add(lineChartControl2);//将ChartControl这个控件添加到这个page中
257             this.xtraTabControl1.SelectedTabPageIndex = tabPagesCount;//切换到这个page为选中的page
258 
259 
260 
261         }
262         public void ShowSeries(ChartControl lineChartControl, Series seriesName, string seriesText, List<double> xAxes,
263     List<double> yAxes, int iMarkerKind)
264         {
265 
266             //seriesName = new Series(seriesText, ViewType.ScatterLine);//新建立一个系列
267             seriesName.ArgumentScaleType = ScaleType.Numerical;//x轴数据类型,为数字
268             ((LineSeriesView)seriesName.View).LineMarkerOptions.Kind = (MarkerKind)((iMarkerKind % 9));//mark类型  MarkerKind.Triangle
269             ((LineSeriesView)seriesName.View).MarkerVisibility = DevExpress.Utils.DefaultBoolean.True;
270 
271             ((LineSeriesView)seriesName.View).LineStyle.DashStyle = DashStyle.Dash;//线型
272             for (int pointIndex = 0; pointIndex < xAxes.Count; pointIndex++)
273             {
274                 seriesName.Points.Add(new SeriesPoint(xAxes[pointIndex], yAxes[pointIndex]));
275             }
276             lineChartControl.Series.Add(seriesName);//往ChartControl控件上添加系列
277             lineChartControl.Legend.Visible = true;//图例可见
278             ((XYDiagram)lineChartControl.Diagram).Rotated = false;//ChartControl控件不旋转
279             lineChartControl.Dock = DockStyle.Fill;//ChartControl控件在父控件内填满平铺
280         }
281 
282         public void ShowSeries_yuce(ChartControl lineChartControl, Series seriesName, string seriesText, List<double> xAxes,
283     List<double> yAxes)
284         {
285 
286             //seriesName = new Series(seriesText, ViewType.ScatterLine);//新建立一个系列
287             seriesName.ArgumentScaleType = ScaleType.Numerical;//x轴数据类型,为数字
288             
289             ((LineSeriesView)seriesName.View).LineStyle.DashStyle = DashStyle.Dash;//线型
290             for (int pointIndex = 0; pointIndex < xAxes.Count; pointIndex++)
291             {
292                 seriesName.Points.Add(new SeriesPoint(xAxes[pointIndex], yAxes[pointIndex]));
293             }
294             lineChartControl.Series.Add(seriesName);//往ChartControl控件上添加系列
295             lineChartControl.Legend.Visible = true;//图例可见
296             ((XYDiagram)lineChartControl.Diagram).Rotated = false;//ChartControl控件不旋转
297             lineChartControl.Dock = DockStyle.Fill;//ChartControl控件在父控件内填满平铺
298         }
299 
300         private void Form1_Load(object sender, EventArgs e)
301         {
302 
303         }
304 
305 
306     }
307 }
Form1.cs-运行正确

相关文章: